繁体   English   中英

跨python进程共享的Python Twisted反应器?

[英]Python Twisted reactor shared across python processes?

尝试问一个基本的是/否问题-我担心的答案是“否”,但如果是“是”,请寻求有关如何操作的指导!

我有一个用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测试,但原理是相同的)是:

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

最后

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中的反应堆上。

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

在mailserver.py中,我维护了一个“ runningListeners”的字典(例如: {'p25': <<class 'twisted.internet.tcp.Port'> of mailserver.ConsoleSMTPFactory on 25>} ))被添加为适当地调用startListener和stopListener。 但是,这显然仅是script1的本地语言,而不是3个脚本之间的“共享”字典……而且我非常怀疑在script2和script3中启动的侦听器是否实际上“附加”到了在script1中作为netstat启动的反应堆/ ps可能会建议-因此可能不是“可用”的侦听器...

因此,是的,没有问题-甚至可以使用多个python脚本来做我想做的事情,如果是这样,那么有人可以提出关于如何实现此目标的建议吗?

非常感谢!

一种解决方案是使script1“更智能”,以便它可以运行一个扭曲的反应堆,而且还可以运行附加的轮询代码,以监视文件系统或网络中是否有其他两个脚本发送的定制“指令”。

然后,来自其他两个脚本的指令将指示script1有关侦听的内容(例如,侦听的端口等以及事件发生时应运行的处理程序代码,可能使用子流程模块委派),并还指示侦听器的时间。应该停止。

因此,我想答案是肯定的,但这并不容易,因此您不妨先重新考虑一下设计。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM