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

Cannot stop twisted reactor when calling reactor.stop()

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

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

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

我试过在调用reactor.callFromThread(...)后调用sys.exit(),但也没用。这一次,window也不肯关机!整个程序无响应,但没有错误。

那么如何彻底关闭反应堆?

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

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

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