Downloads
Get Started with Pip
$virtualenvtry-twisted $ . try-twisted/bin/activate $ pip install twisted[tls] $ twist --help
Download Direct from PyPI
https://pypi.org/project/Twisted/
Optional Dependencies
Community
See the code for Twisted (and more) on GitHub
Read our blog
Join the discussion list
Come chat with us on IRC
Ask on Stack Overflow
Follow us on Twitter
Donate to Twisted
Donations are tax-deductible.
Twisted Sponsors
Participate in the Twisted Project Sponsorship Program! For Silver Sidewinder and higher-level sponsors, we will display your logo here on the front page for one year.
What is Twisted?
Twisted is an event-driven networking engine written in Python and licensed under the open source MIT license. Twisted runs on Python 2 and an ever growing subset also works with Python 3.
Code Examples
Twisted makes it easy to implement custom network applications. Here's a TCP server that echoes back everything that's written to it:
from twisted.internet import protocol, reactor, endpoints class Echo(protocol.Protocol): def dataReceived(self, data): self.transport.write(data) class EchoFactory(protocol.Factory): def buildProtocol(self, addr): return Echo() endpoints.serverFromString(reactor, "tcp:1234").listen(EchoFactory()) reactor.run()
Learn more about writing servers, writing clients and the core networking libraries , including support for SSL, UDP, scheduled events, unit testing infrastructure, and much more.
Twisted includes an event-driven web server. Here's a sample web application; notice how the resource object persists in memory, rather than being recreated on each request:
from twisted.web import server, resource from twisted.internet import reactor, endpoints class Counter(resource.Resource): isLeaf = True numberRequests = 0 def render_GET(self, request): self.numberRequests += 1 request.setHeader(b"content-type", b"text/plain") content = u"I am request #{}\n".format(self.numberRequests) return content.encode("ascii") endpoints.serverFromString(reactor, "tcp:8080").listen(server.Site(Counter())) reactor.run()
Learn more about web application development, templates and Twisted's HTTP client.
Here's a simple publish/subscribe server, where clients see all messages posted by other clients:
from twisted.internet import reactor, protocol, endpoints from twisted.protocols import basic class PubProtocol(basic.LineReceiver): def __init__(self, factory): self.factory = factory def connectionMade(self): self.factory.clients.add(self) def connectionLost(self, reason): self.factory.clients.remove(self) def lineReceived(self, line): for c in self.factory.clients: source = u"<{}> ".format(self.transport.getHost()).encode("ascii") c.sendLine(source + line) class PubFactory(protocol.Factory): def __init__(self): self.clients = set() def buildProtocol(self, addr): return PubProtocol(self) endpoints.serverFromString(reactor, "tcp:1025").listen(PubFactory()) reactor.run()
You can test this out by opening two terminals and doing telnet localhost 1025
in each, then typing things.
Twisted includes a sophisticated IMAP4 client library.
from __future__ import print_function import sys from twisted.internet import protocol, defer, endpoints, task from twisted.mail import imap4 from twisted.python import failure @defer.inlineCallbacks def main(reactor, username="alice", password="secret", strport="tls:example.com:993"): endpoint = endpoints.clientFromString(reactor, strport) factory = protocol.Factory.forProtocol(imap4.IMAP4Client) try: client = yield endpoint.connect(factory) yield client.login(username, password) yield client.select('INBOX') info = yield client.fetchEnvelope(imap4.MessageSet(1)) print('First message subject:', info[1]['ENVELOPE'][1]) except: print("IMAP4 client interaction failed") failure.Failure().printTraceback() task.react(main, sys.argv[1:])
Give this a try, supplying your IMAP4 username, password, and client endpoint description for your IMAP4 server. You'll see the subject of the first message in your mailbox printed.
See the TwistedMail documentation for more information.
More Protocols
Twisted also supports many common network protocols, including SMTP, POP3, IMAP, SSHv2, and DNS. For more information see our documentation and API reference.
Community
- Get in touch with the Twisted community through email, Stack Overflow or IRC;
- Learn about the Twisted development process and how to contribute;
- Read about software using Twisted and their success stories;
- Find out what Twisted Matrix Laboratories is;
- Learn about the individuals and organisations that aid Twisted with donations of hardware, software, hosting and other things;
- Help improve Twisted on Windows!