[Twisted-Python] Synchronization techniques
Andrew Francis
andrewfr_ice at yahoo.com
Fri Apr 6 05:25:23 MDT 2007
Hello Brian:
I have just recently started reading this thread.
>1. The interactive python interpreter is a
completely >synchronous universe - getting the reactor
running in >this context seems like a hack. The only
way I have >seen this done is by running the reactor
in
>a different thread. The problem with this is that it
>is inevitable that you end up wanting to do things
>with Deferreds in the main thread where user code is
>running. But, as I understand it, Twisted is not
>thread safe, so at that point, you are playing with
>(threaded) fire.
I recented subscribed to this mailing list to ask
questions about integrating Stackless with Twisted....
I execute Stackless and Twisted in their own threads.
Otherwise when the Twisted reactor blocks, Stackless
tasklets (read threads) that could otherwise run,
would be blocked too.
I start the Stackless thread with a
reactor.callInThread(). Because of thread safety, I
use the callFromThread() method to make Twisted calls.
Also for safety and performance, I make the threads
communicate through a deque (I took Phil Mayer's
suggestion).
As for deferreds. Essentially I make the deferreds and
Stackless threads communicate through channels. So
Stackless tasklets block until there is input.
There are still a few issues and I am still conducting
tests, However things seem to be working...
One of the Stackless members, Carlos de Paula has
started a repository that includes Twisted/Stackless
examples. There are examples using the Perspective
Broker and callInThread/callFromThread.
http://code.google.com/p/stacklessexamples/wiki/StacklessTwisted
Cheers,
Andrew
____________________________________________________________________________________
No need to miss a message. Get email on-the-go
with Yahoo! Mail for Mobile. Get started.
http://mobile.yahoo.com/mail
More information about the Twisted-Python
mailing list