控制Twisted反应堆的最佳方法是什么,它是无阻塞的?

shi*_*ino 6 python twisted nonblocking

而不是运行reactor.run(),我想在维护自己的主循环时偶尔调用别的东西(我不喜欢,像reactor.runOnce()或其他东西).扭曲的是最好的做法吗?

Gly*_*yph 11

是.最好的做法是,这是一个坏主意,而你真的不需要这样做.它不适用于所有反应堆,你当然不能有两个不同的库想要这样做.

为什么需要维护自己的主循环?机会是,它类似于"我想使用PyGame"或"我正在编写GUI程序,我想使用GTK的主循环"或"我在Blender中使用Twisted并且它有自己的事件处理".如果是这种情况,您应该询问具体问题,因为每个问题都有自己的答案.

如果你绝对需要这样做(并且,再次:你没有),那么这样做的方法就是reactor.iterate()定期打电话.这将是缓慢的,中断信号处理,并具有相关的不稳定的语义reactor.stop().它会在你的程序中引入许多错误,否则就会出现错误,当你需要帮助诊断它们时,如果你问Twisted开发团队的人,他们会告诉你的第一件事就是"停止这样做,你不要不需要这样做.

  • 这只是意味着你想要pygletreactor:http://code.google.com/p/pyglet-twisted/ (3认同)
  • 它*总是最好的.有两种程序:正确事件驱动的程序,以及响应某些类型的输入而只有事件驱动的程序,以及在某些模式下它们挂起和意外断开的错误.但是,你不需要同意我的观点:你的问题基本上是"如何让我的程序变得越来越慢",答案是"定期调用reactor.iterate()".扭曲并不妨碍你编写糟糕的程序:). (3认同)
  • 您可能会注意到,在描述"模拟事件"时,您必须使用"事件"一词,如"事件驱动".Twisted不会将用户事件优先于模拟事件.事实上,它根本没有任何事件优先级排序机制.(如果我们这样做会很好,但是你可以自己实现它.)扭曲是完全通用的.虽然您可以随意对特定的实现技术持不同意见,但请不要对Twisted做出事实上不准确的陈述. (3认同)
  • 您可以使用Pyglet反应器,然后您就可以在程序中使用Pyglet和Twisted; 这样您就不需要执行reactor.run()以外的操作. (2认同)