如何以非阻塞方式控制Twisted的reactor?

6 投票
1 回答
1505 浏览
提问于 2025-04-16 07:02

我想要在自己控制的主循环中,偶尔调用一些其他的东西(比如 reactor.runOnce() 之类的),而不是一直运行 reactor.run()。在使用 twisted 的时候,有没有什么好的做法可以做到这一点?

1 个回答

11

是的。最好的做法是,这种做法其实并不好,你根本不需要这样做。这种方法并不适用于所有的反应器,而且你肯定不能有两个不同的库都想这么做。

你为什么需要维护自己的主循环呢?很可能是因为你想用“PyGame”或者“我在写一个图形界面程序,想用GTK的主循环”,或者“我在Blender里用Twisted,它有自己的事件处理”。如果是这样的话,你应该问一个具体的问题,因为每种情况都有自己的解决办法。

如果你真的需要这样做(不过再强调一次:你其实不需要),那么做法就是定期调用reactor.iterate()。这样做会很慢,还会破坏信号处理,并且在使用reactor.stop()时会出现奇怪的情况。这会给你的程序引入很多本来不会出现的bug,当你需要帮助来解决这些问题时,如果你问Twisted开发团队的人,他们首先会告诉你“别这么做,你根本不需要这样”。

撰写回答