[Twisted-Python] reactor.stop() and deferToThead

Jean-Paul Calderone exarkun at divmod.com
Fri May 29 06:40:21 MDT 2009


On Fri, 29 May 2009 14:22:43 +0200, Thomas Jakobsen <thomas.jakobsen at alexandra.dk> wrote:
>Hi
>
>It seems that things being deferredToThread continue to run even
>though reactor.stop() is called.

Threads cannot be interrupted.  They will run until they function they are
running returns.

>
>Output from the example below is:
>
>stuff1 finished; stopping reactor
>stuff2 finished
>
>Is there a way to abort the remaining execution of stuff2 in this
>case? It would be handy if, say, some exception happens in in stuff1
>that causes the execution of the remaining stuff2 to be meaningless.

You can make stuff2 cooperate with stuff1 so that it returns earlier.

> [snip]
>
>def stuff1():
>    time.sleep(2)
>    print "stuff1 finished; stopping reactor"
>    reactor.stop()

Also, you're calling reactor.stop() in a non-reactor thread here.  This is
not allowed.  You must call it in the reactor thread, along with almost
every other API.  Try reactor.callFromThread(reactor.stop), instead.

Jean-Paul




More information about the Twisted-Python mailing list