[Twisted-Python] Crochet 1.5.0: Use Twisted in Django, Flask, or anywhere else

2016-04-13 Thread Itamar Turner-Trauring

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[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)

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/.


--Itamar Turner-Trauring
___
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python


Re: [Twisted-Python] Crochet 1.5.0: Use Twisted in Django, Flask, or anywhere else

2016-04-13 Thread Itamar Turner-Trauring
I messed up the email headers on this, so PLEASE BE CAREFUL if you're 
replying to this, or the reply will end up spamming 
python-announce-list. Sorry.


___
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python


Re: [Twisted-Python] Crochet 1.5.0: Use Twisted in Django, Flask, or anywhere else

2016-04-13 Thread Glyph

> On Apr 13, 2016, at 13:18, Itamar Turner-Trauring  wrote:
> 
> Do you wish you could:
> Use the power of Twisted's asynchronous networking in Django, Flask, or other 
> threaded applications?

Thanks for the update, Itamar!

Do you think maybe it's time to integrate Crochet into Twisted proper, so we 
can obviate the need for the 'setup()' step, and just have the reactor do that 
itself?

-glyph

___
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python


Re: [Twisted-Python] Crochet 1.5.0: Use Twisted in Django, Flask, or anywhere else

2016-04-13 Thread Itamar Turner-Trauring

On 04/13/2016 06:52 PM, Glyph wrote:


Do you think maybe it's time to integrate Crochet into Twisted proper, 
so we can obviate the need for the 'setup()' step, and just have the 
reactor do that itself?


Well, setup() runs the reactor in a thread, which is probably not what 
you want in a regular Twisted program. For Twisted-native applications 
interacting with Crochet you don't want to do the auto-reactor mode, so 
you call no_setup() earlier in startup process, and then subsequent 
setup() calls (e.g. from other packages) are ignored.


So given it would have to have the same API as currently, I'm not sure 
what the benefit of integrating it into Twisted would be.


___
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python


Re: [Twisted-Python] Crochet 1.5.0: Use Twisted in Django, Flask, or anywhere else

2016-04-13 Thread Glyph

> On Apr 13, 2016, at 16:50, Itamar Turner-Trauring  wrote:
> 
> On 04/13/2016 06:52 PM, Glyph wrote:
>> 
>> Do you think maybe it's time to integrate Crochet into Twisted proper, so we 
>> can obviate the need for the 'setup()' step, and just have the reactor do 
>> that itself?
>> 
> Well, setup() runs the reactor in a thread, which is probably not what you 
> want in a regular Twisted program. For Twisted-native applications 
> interacting with Crochet you don't want to do the auto-reactor mode, so you 
> call no_setup() earlier in startup process, and then subsequent setup() calls 
> (e.g. from other packages) are ignored.

One advantage of having this directly supported in Twisted, then, would be 
calling no_setup() (or equivalent) early on in 'twistd' and equivalent tools, 
so that crochet-using modules could be imported as part of a twisted-native 
plugin?

> So given it would have to have the same API as currently, I'm not sure what 
> the benefit of integrating it into Twisted would be.

It might also be able to have a slightly different API.  For example, maybe 
setup() or some analogue thereof could set up an 'atexit' hook that runs the 
reactor if nobody gets around to calling run() before it exits?

-glyph
___
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python