希望您能弄清楚为什么我的反应堆不会停止?在我的线程构造器中,我尝试了react.startRunning(False)和Reactor.run()。在此线程的运行命令中,我定期使用react..rate(),然后尝试了react.stop()和react.callFromThread(reactor.stop),但是Reactor不会停止,甚至不会停止。关于此的任何反馈都将很棒:)
或者,我还能用与twisted.internet服务器和资源设置/监听端口兼容的方式替换它吗?还是可以代替电抗器和twisted.internet的东西?
func_1()
编辑:添加了示例。问题出在ControlThread中,其他类都在背景中。
答案 0 :(得分:0)
您似乎正在尝试在非主线程中运行Twisted反应器,然后向其发送消息(停止消息,以及其他一些消息)。
Twisted已经具有线程安全的消息传递API-您甚至正在使用它:reactor.callFromThread
。您应该只使用它与反应堆通信。这样就无需调用非接口方法startRunning
和iterate
并使用令人困惑和复杂的running
属性(在编写的任何基于Twisted的程序中都应避免使用这些属性)
所以:
class ReactorThread(Thread):
def __init__(self, reactor):
Thread.__init__(self)
self.reactor = reactor
def listen(self):
self.reactor.callFromThread(self._listen)
def _listen(self):
self.site = server.Site(PageFactory())
self.port = reactor.listenTCP(host_port, self.site)
def run(self):
self.reactor.run(installSignalHandlers=False)
# later ...
from twisted.internet import reactor
t = ReactorThread(reactor)
t.start()
# ...
t.reactor.callFromThread(t.reactor.stop)
t.join()
您还可以使用t.reactor.callFromThread
发送任何您喜欢的其他消息,其形式为将在反应堆线程中调用的函数。
您可能还想看看https://crochet.readthedocs.io/en/stable/来管理线程中的Twisted。