[Twisted-Python] stop conditions and deferToThread()

Thomas Jakobsen thomas.jakobsen at alexandra.dk
Wed Jun 10 06:04:16 EDT 2009


Hi

As discussed in a previous thread

   http://twistedmatrix.com/pipermail/twisted-python/2009-May/019717.html

a task put in its own thread via deferToThread() won't stop even
though the reactor has stopped. It has to carry out its own check that
the reactor is running and stop if that is not the case.

My question is: Is it possible to use anything else than the
reactor.running as stop condition in this way? In my current twisted
application I would like to keep the reactor running but still have
some deferToThread jobs stop if e.g. an exception occurs in one of the
jobs.

In the code example below I try to use my own global field, running,
as stop condition, but it doesn't work. If I let bar() call
reactor.stop() after the time.sleep(3) and use reactor.running in
foo() it works, however.

import time
from twisted.internet import reactor
from twisted.internet.threads import deferToThread

running = True

def foo():
   while running:
       print "working"
       time.sleep(1)

def bar():
   time.sleep(3)
   print "stopping"
   running = False

d1 = deferToThread(foo)
d2 = deferToThread(bar)

reactor.run()


Best regards,
Thomas Jakobsen




More information about the Twisted-Python mailing list