Python Twisted reactor在Python进程中共享?

2024-10-03 13:29:35 发布

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

试着问一个基本的“是/否”问题——我担心答案是“否”——但如果是“是”,那就寻求如何解决的指导!在

我有一个用Twisted Python编写的SMTP服务器。它非常好用!函数调用的基本流程/顺序如下:

script1.py
from mailserver import startReactor, startListener, stopListener, stopReactor
startReactor()
startListener("p25")
startListener("p26")
# Handle incoming connections etc until sigint receivedand then exit cleanly
stopListener("p25")
stopListener("p26")
stopReactor()

我想在一个或多个单独的python脚本中(实际上是RobotFramework测试,但原理是一样的)是:

^{2}$

最后呢

script3.py
from mailserver import startReactor, startListener, stopListener, stopReactor
stopListener("p25")
startListener("p25custom)
# Handle incoming connections etc until all necessary stuff on "custom" p27 is complete
stopListener("p25custom")
startListener("p25)

因此,我们的想法是在后台执行script1.py,然后可以执行script2、script3等,“更改”正在运行的侦听器列表,但是这些侦听器附加到script1中的reactor。。。。在

通过监视ps-xaf和netstat,我可以看到在所有脚本中打开的套接字,并且script1干净地退出。。。但是script2和script3中打开的套接字似乎没有关闭。。。在

在邮件服务器.py我维护了一条“runningListeners”(例如:{'p25': <<class 'twisted.internet.tcp.Port'> of mailserver.ConsoleSMTPFactory on 25>})的语句,它作为startListener添加到/从中删除,stopListener根据需要被调用。然而,这显然只是script1的局部特性,而不是3个脚本之间的“共享”dict。。。我非常怀疑script2和script3中启动的侦听器实际上是否像netstat/ps所建议的那样“附加”在script1中启动的reactor上,因此可能不是“可用”的侦听器。。。在

所以有一个是不是的问题——有没有可能像我正在尝试用多个python脚本来做的事情呢?如果可以,有人能就我如何实现这一点提出建议吗?在

非常感谢!在


Tags: frompyimport服务器脚本侦听器script2script1
1条回答
网友
1楼 · 发布于 2024-10-03 13:29:35

一种解决方案是使script1“更智能”,这样它就可以运行一个单扭曲反应器,但也可以让它运行额外的轮询代码,监视文件系统或网络,以获取从其他两个脚本发送的定制“指令”。在

来自其他两个脚本的指令将指示script1侦听什么(例如,侦听哪些端口等,以及在发生事件时应该运行哪些处理程序代码,可能使用子进程模块进行委派),还指示何时应停止侦听器。在

所以我想答案是,是的,但这并不容易,所以你可以先重新考虑一下你的设计。在

相关问题 更多 >