Twisted Logic by Ashwini Oruganti

Twisted Logic by Ashwini Oruganti

This talk will be a survey of my learning experience adding new endpoint APIs to Twisted, an event-driven networking engine (as a Google Summer of Code project), with a special focus on the analysis of some of the horror stories that surround Twisted. Right from the asynchronous I/O model to Deferreds: if it scares you, we’ll figure a way out and see what the makers of Twisted say when confronted.

Afcfefa1f067d10bd021de0cc2e5e806?s=128

PyCon 2013

March 15, 2013
Tweet

Transcript

  1. 4.

    Google Summer of Code spend the summer working on an

    open source project with a mentoring organization
  2. 5.

    Endpoint an interface with a single method that takes an

    argument returns*: a listening port / a connected protocol
  3. 7.

    class TCP4ServerEndpoint(object): """ Implements TCP server endpoint with an IPv4

    configuration """ ... def __init__(self, reactor, port, backlog=50, interface=''): ... def listen(self, protocolFactory): return defer.execute( self._reactor.listenTCP, ...)
  4. 8.

    class TCP6ServerEndpoint(object): """ Implements TCP server endpoint with an IPv6

    configuration """ ... def __init__(self, reactor, port, backlog=50, interface='::'): ... def listen(self, protocolFactory): return defer.execute( self._reactor.listenTCP, ...)
  5. 9.
  6. 11.

    class StandardIOEndpoint(object): """ A Standard Input/Output endpoint """ implements(interfaces.IStreamServerEndpoint) def

    __init__(self, reactor): ... def listen(self, stdioProtocolFactory): return defer.execute(stdio.StandardIO, stdioProtocolFactory.buildProtocol( PipeAddress()))
  7. 12.

    Moral of the story: Do not get flustered. Do not

    overthink.. Forget it's Twisted
  8. 16.

    class TCP6ClientEndpoint(object): def __init__(self, reactor, host, port, timeout=30, bindAddress=None): ...

    def connect(self, protocolFactory): """ Connect via TCP, once the hostname resolution is done. """ ...
  9. 17.

    def _nameResolution(self, host): """ Resolve the hostname string into a

    tuple containing the host IPv6 address. """ ... def _resolvedHostConnect(self, resolvedHost, protocolFactory): """ Connect to the server using the resolved hostname. """ ...
  10. 19.

    class SomeState(object): def __init__(self): self.values = [] def getValue(self): return

    self.values.pop(0) def addValue(self, value): self.values.append(value)
  11. 25.

    “It was created by a couple of dudes who dropped

    out of school, and a 16-year-old. HOW HARD COULD IT BE?”
  12. 26.
  13. 32.