【发布时间】:2010-11-14 06:10:12
【问题描述】:
我不想运行 reactor.run(),而是偶尔调用其他东西(我不知道,比如 reactor.runOnce() 或其他东西),同时保持我自己的主循环。是否有扭曲的最佳实践?
【问题讨论】:
标签: python twisted nonblocking
我不想运行 reactor.run(),而是偶尔调用其他东西(我不知道,比如 reactor.runOnce() 或其他东西),同时保持我自己的主循环。是否有扭曲的最佳实践?
【问题讨论】:
标签: python twisted nonblocking
是的。最佳实践是,这是一个坏主意,而且您永远不需要这样做。它不适用于所有反应器,当然你不能有两个不同的库想要这样做。
为什么需要维护自己的主循环?很有可能,它类似于“我想使用 PyGame”或“我正在编写一个 GUI 程序并且我想使用 GTK 的主循环”或“我在 Blender 中使用 Twisted,它有自己的事件处理”。如果是这种情况,你应该问那个具体的问题,因为每个问题都有自己的答案。
如果您绝对需要这样做(同样:您不需要)这样做的方法是定期致电reactor.iterate()。这将是缓慢的、中断的信号处理,并且相对于reactor.stop() 具有不稳定的语义。它会在你的程序中引入许多原本不会存在的错误,当你需要帮助诊断它们时,如果你问 Twisted 开发团队的某个人,他们会告诉你的第一件事是“停止这样做,你不要'不需要这样做'。
【讨论】: