Do you wish you could:
* Use the power of Twisted's asynchronous networking in Django, Flask, or other threaded applications? * Provide a blocking API powered by Twisted underneath, without exposing it to the caller? * Write a library that provides APIs both for Twisted and non-Twisted applications? * Use threads more easily inside Twisted applications?
Crochet lets you do all that, and more, by hiding and automatically starting the Twisted reactor and providing a blocking API for calling into Twisted. If you need to use your library from a normal Twisted application you can disable the auto-start functionality. Here's an example of using Twisted in a blocking manner:
from __future__ import print_function from twisted.names import client from crochet import setup, wait_for setup()
@wait_for(timeout=5.0) def gethostbyname(name): """Use the Twisted DNS library.""" d = client.lookupAddress(name) d.addCallback(lambda result: result.payload.dottedQuad()) return d
if __name__ == '__main__': # Application code using the public API - notice it works in a normal # blocking manner, with no event loop visible: import sys name = sys.argv ip = gethostbyname(name) print(name, "->", ip)
New in 1.5.0 is official Python 3.5 support; Python 2.6, 3.3 and older versions of Twisted are no longer officially supported (but are likely to still work).
If you need help using Crochet (or just general Twisted or Python help) I am currently available for short-term consulting. You can read the documentation at https://crochet.readthedocs.org/.