扭曲的非阻塞执行 reactor.run()?
我正在使用twisted的反应器来非阻塞地读取套接字输入。不过,我想在反应器开始运行后再运行另一个循环。
.....
reactor.listenTCP(12345, MyFactory())
reactor.run()
# ... blah blah socket input related code
while 1:
...
...
if something:
reactor.stop()
问题是,在调用reactor.run()
之后,while
循环就无法工作了。我想知道,除了在主线程中使用线程te = Thread(target=reactor.run, args=(False,)).start()
,还有没有其他方法可以让reactor.run()
以非阻塞的方式运行?
谢谢。
1 个回答
5
reactor.run()
是一个会阻塞的调用。这意味着在它运行的时候,程序会停下来,等它完成后才能继续执行。你需要做的是,把你的循环放在一个单独的线程里。按照你现在的写法,循环会运行,但只有在你通过某个外部事件或信号来停止反应器的时候,它才会继续。到那时,reactor.run()
的调用才会结束,接下来的代码才会执行。
其实我也在寻找一种方法,可以让 reactor.run()
以非阻塞的方式运行。如果有人知道怎么做,我非常想听听。