调用 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 提交错误报告。如果没有,请尝试为问题添加更多详细信息。
我正在使用 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 提交错误报告。如果没有,请尝试为问题添加更多详细信息。