[Twisted-Python] reactor.stop() doesn't stop the select reactor?
Benjamin Henry
bhenry at pacecocorp.com
Tue Sep 25 15:52:35 EDT 2007
This response won't be as elegant as some, but you can't start the
reactor twice in the same process. You can stop the reactor when the
service is ended (client or server), but with twistd, it starts and
stops itself.
So, is it necessary that you start and stop the reactor to run the tests
in your code? Why not make each test a callback?
Ben Henry
-----Original Message-----
From: twisted-python-bounces at twistedmatrix.com
[mailto:twisted-python-bounces at twistedmatrix.com] On Behalf Of Sam
Roberts
Sent: Tuesday, September 25, 2007 12:45 PM
To: twisted
Subject: [Twisted-Python] reactor.stop() doesn't stop the select
reactor?
I have unittests where each test:
def test_this
.. setup
reactor.run() # ... when test is done reactor.stop() will be called
def test_that
.. same as above
does some setup, runs the reactor until test is complete, then stops the
reactor, asserting all went as intended.
However, second call to reactor.stop() doesn't stop the reactor. strace
shows reactor going back into select(), blocking forever, but killable
with sigquit.
Is this really intentional?
Example code and testrun follow.
~/w/engine % python t_reactor_stop.py
2.5.1 (r251:54863, May 2 2007, 16:27:44)
[GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)]
[twisted, version 2.5.0]
<twisted.internet.selectreactor.SelectReactor object at 0x2b684344a310>
stopping reactor running? 1
reactor stopped
stopping reactor running? 1
zsh: quit (core dumped) python t_reactor_stop.py
~/w/engine % cat t_reactor_stop.py
import sys
print sys.version
from twisted.internet import reactor
import twisted
print twisted._version.version
print reactor
def stop_reactor():
print "stopping reactor running? " + repr(reactor.running)
try:
reactor.stop()
except:
print "stop died!"
reactor.callWhenRunning(stop_reactor)
reactor.run()
print "reactor stopped"
reactor.callWhenRunning(stop_reactor)
reactor.run()
# Unreachable, why?
print "reactor stopped"
reactor.callWhenRunning(stop_reactor)
reactor.run()
print "reactor stopped"
_______________________________________________
Twisted-Python mailing list
Twisted-Python at twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
More information about the Twisted-Python
mailing list