是twisted.internet.反应器全球的?

2024-06-25 23:18:33 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,如果一个应用程序执行from twisted.internet import reactor,而另一个应用程序执行相同的操作,则这些reactors是否相同?在

我之所以这么问是因为Deluge,一个使用twisted的应用程序,看起来像是使用reactor将他们的UI(gtk)连接到twisted驱动的应用程序的其余部分(我正在试图理解源代码)。例如,当UI关闭时,它只需调用reactor.stop()。在

就这些吗?对我来说这有点神奇。如果我想运行另一个使用twisted的应用程序呢?在


Tags: fromimport应用程序uigtk源代码twistedinternet
2条回答

是的,Python中的每个模块都是全局的,或者更好地说,是一个单独的模块:当您执行from twisted.internet import reactor操作时,Python的导入机制首先检查{},如果存在,则返回所述值;仅当它不存在时(即。,{future}第一次可能是导入一个模块。在

在单例设计模式中没有什么特别神奇的东西,尽管有时候当你迫切需要一个以上的东西时,它会被证明是有限的,而架构已经规定“只有一个”。Twisted的docs确认:

New application code should prefer to pass and accept the reactor as a parameter where it is needed, rather than relying on being able to import this module to get a reference. This simplifies unit testing and may make it easier to one day support multiple reactors (as a performance enhancement), though this is not currently possible.

如果这对你的应用程序很重要,那么最好的办法就是为Twisted项目做出贡献,要么是人工(在一个应用程序中编写支持多个反应堆所需的微妙机制,也就是说,多个事件循环)或资助(资金将使某个人能够获得津贴,从而完成这项工作)。在

否则,使用单独的进程(例如,使用标准库的multiprocessing模块),每个进程不超过一个反应器。在

这个反应堆确实是全球性的。它负责事件循环,并注册处理程序来使用事件。如果您想在同一个reactor中使用多个应用程序,可以使用twistd守护程序。http://twistedmatrix.com/documents/current/core/howto/application.html

相关问题 更多 >