您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在扭曲中使用我自己的主循环

在扭曲中使用我自己的主循环

根据现有程序的主循环类型,您可以有几种不同的选择。

如果它是GUI库中的mainloop,则Twisted可能已经支持它在这种情况下,您可以继续使用它。

您也可以编写自己的反应堆。没有很多好的文档,但是您可以看看qtreactor在Twisted外部实现Reactor插件的方式

您还可以使用编写最小反应器threadedselectreactor。有关此文档的文档也很少,但是使用它实现了wxpython反应器。我个人不建议使用这种方法,因为它很难测试,并且可能导致混乱的竞争状况,但是它的优点是可以让您利用Twisted的几乎 所有认网络代码进行 几乎 所有的包装。

如果您确实确定不希望docomputation异步,并且希望在等待Twisted回答时阻止程序,请执行以下操作:

您现在可以docomputation像这样实现:

def docomputation(self):
rpcResult = blockingCallFromThread(reactor, self.myRPCDoer.doRPC)
return self.computeSomethingFrom(rpcResult)

切记reactor.callFromThread(reactor.stop); twistedThread.join()从主循环的关闭过程中调用,否则可能会在退出时看到一些令人困惑的回溯或日志消息。

最后,您应该真正考虑的一个选项,尤其是从长远来看:转储现有的主循环,并找出一种仅使用Twisted的方法。以我的经验,这是在这样的问题中,十分之九的答案。我并不是说这总是 要走的路- 在很多情况下,您确实需要保持自己的主循环,或者花太多精力摆脱现有循环。但是,维护自己的循环也是可行的。请记住,Twisted回路已经过数百万用户的广泛测试,并已在多种环境中使用。如果您的循环也非常成熟,那可能没什么大不了的,但是如果您正在编写一个小的新程序,那么可靠性上的差异可能会很大。

其他 2022/1/1 18:52:05 有450人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶