<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
Do you wish you could:<br>
<ul>
<li>Use the power of Twisted's asynchronous networking in Django,
Flask, or other threaded applications?</li>
<li>Provide a blocking API powered by Twisted underneath, without
exposing it to the caller?</li>
<li>Write a library that provides APIs both for Twisted and
non-Twisted applications?<br>
</li>
<li>Use threads more easily inside Twisted applications?</li>
</ul>
<p>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:<br>
</p>
<pre>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[0][0].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[1]
ip = gethostbyname(name)
print(name, "->", ip)
</pre>
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).<br>
<br>
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 <a
href="https://crochet.readthedocs.org/"><a class="moz-txt-link-freetext" href="https://crochet.readthedocs.org/">https://crochet.readthedocs.org/</a></a>.<br>
<br>
--Itamar Turner-Trauring
</body>
</html>