调用reactor.stop()时无法停止扭曲的reactor



我使用twisted、PySide2和qt5reactor来制作一个通过网络发送数据的简单程序。当我关闭PySide2窗口时,我希望反应堆停止:

class MyWindow(QWidget):
--snip--
def closeEvent(self, event):
super().closeEvent(event)
reactor.callFromThread(reactor.stop)

然而,上面的代码根本不起作用。它不会产生任何错误,但在窗口关闭后,程序不会停止。它只是关闭了与服务器的连接。这意味着反应堆还没有停止。

我试着在调用reactor.callFromThread(...)之后再调用sys.exit(),但也没有用。这一次,窗户也拒绝关闭!整个程序没有响应,但没有错误。

那么我该如何干净地关闭反应堆呢?

由于您使用的是qt5reactor,因此GUI代码与Twisted reactor在同一个线程中运行。这意味着您可以直接调用TwistedAPI,而不需要reactor.callFromThread

这个不应该与您的问题有关,因为它也被允许从reactor线程使用reactor.callFromThread——尽管qt5reactor可能没有正确实现这种不寻常的用法。

不过,目前这个问题还没有足够的细节让我提出另一个假设。如果您发现调用reactor.stop()直接修复了问题,那么可能值得针对qt5reactor提交错误报告。如果没有,请尝试为问题添加更多细节。

最新更新