[Twisted-Python] ANN: Crochet 1.3.0 - Use Twisted Anywhere!

Itamar Turner-Trauring itamar at itamarst.org
Sat May 31 14:08:13 MDT 2014


Crochet is an MIT-licensed library that makes it easier to use Twisted 
from regular blocking code. Some use cases include:

  * Easily use Twisted from a blocking framework like Django or Flask.
  * Write a library that provides a blocking API, but uses Twisted for
    its implementation.
  * Port blocking code to Twisted more easily, by keeping a backwards
    compatibility layer.
  * Allow normal Twisted programs that use threads to interact with
    Twisted more cleanly from their threaded parts. For example this can
    be useful when using Twisted as a WSGI container.

This is a bugfix release, recommended for all users of Crochet.

Crochet can be downloaded from https://pypi.python.org/pypi/crochet or 
by running:

     $ pip install crochet

Documentation can be found at http://crochet.readthedocs.org 
<https://crochet.readthedocs.org/>

Bugs and feature requests should be filed at the project 
https://github.com/itamarst/crochet

Here’s an example of a program using Crochet. Notice that you get a 
completely blocking interface to Twisted and do not need to run the 
Twisted reactor, the event loop, yourself.

#!/usr/bin/python
"""
Do a DNS lookup using Twisted's APIs.
"""
from  __future__  import  print_function

# The Twisted code we'll be using:
from  twisted.names  import  client

from  crochet  import  setup,  wait_for
setup()


# Crochet layer, wrapping Twisted's DNS library in a blocking call.
@wait_for(timeout=5.0)
def  gethostbyname(name):
     """Lookup the IP of a given hostname.

     Unlike socket.gethostbyname() which can take an arbitrary amount of time
     to finish, this function will raise crochet.TimeoutError if more than 5
     seconds elapse without an answer being received.
     """
     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)

Run on the command line:

> $ python blockingdns.py twistedmatrix.com
> twistedmatrix.com -> 66.35.39.66

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://twistedmatrix.com/pipermail/twisted-python/attachments/20140531/742ebe31/attachment.html>


More information about the Twisted-Python mailing list