Python twisted.internet.reactor是全球性的吗?

Python twisted.internet.reactor是全球性的吗?,python,networking,twisted,reactor,Python,Networking,Twisted,Reactor,例如,如果一个应用程序从twisted.internet导入reactor,而另一个应用程序执行相同的操作,那么这些reactor是否相同 我这样问是因为,使用twisted的应用程序看起来像是使用reactor将其UI(gtk)连接到twisted驱动的应用程序的其余部分(我试图理解源代码)。例如,当UI关闭时,它只调用reactor.stop() 就这些吗?对我来说这似乎有点神奇。如果我想运行另一个使用twisted的应用程序,该怎么办?是的,Python中的每个模块都是全局的,或者更好地说

例如,如果一个应用程序从twisted.internet导入reactor,而另一个应用程序执行相同的操作,那么这些
reactor
是否相同

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


就这些吗?对我来说这似乎有点神奇。如果我想运行另一个使用twisted的应用程序,该怎么办?

是的,Python中的每个模块都是全局的,或者更好地说,是单个的:当您从twisted.internet导入reactor执行
时,Python的导入机制首先检查
sys.modules['twisted.internet.reactor']
,如果存在,则返回所述值;只有在不存在的情况下(即,第一次导入模块时),该模块才是第一次实际加载的(并隐藏在
sys.modules
中的条目中,以备将来可能的导入)

在单例设计模式中没有什么特别神奇的地方,尽管有时当你迫切需要不止一种架构规定“只能有一种”的东西时,它会被证明是有限的。让我们承认:

新的应用程序代码应该更喜欢 通过并接受反应堆作为一个整体 参数,而不是 而不是依靠进口 此模块用于获取参考。这 简化单元测试,并可能使 一天支持多个 反应堆(作为一种性能) 增强),尽管这不是 目前可能

如果这对你的应用程序至关重要的话,最好的办法就是为Twisted项目捐款,要么是人工(在一个应用程序中编写支持多个反应堆所需的微妙机制,即多个事件循环)要么是资金(钱可以让某人获得津贴来完成这项工作)


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

反应器确实是全局的。它负责事件循环,您可以注册处理程序来使用事件。如果您想使用多个应用程序与同一反应器,可以使用twistd守护进程

你所说的“申请”是什么意思?您是指单独的Python进程还是指在单个进程中运行多个东西?