我正在学习python,所以我不是专家。
我有3个不同的脚本基本上做同样的事情。 每个脚本都将使用者附加到RabbitMQ队列并处理队列。
我想构建一个包装器来运行这3个脚本并构建一个自动启动系统的守护程序。
我的包装器也应该具有管理错误的逻辑,并且如果其中一个子进程死掉并收集每个子进程的输出,则启动子进程。
结构是这样的:
main.py
|-->consumer_one.py
|-->consumer_two.py
|-->consumer_three.py
您能否建议是否存在以简单方式管理流程分叉的包?
非常感谢mutch
答案 0 :(得分:0)
您可能希望使用concurrent.future标准库模块。 它使用起来非常简单并且非常易于管理
这是一个快速而又肮脏的例子:
from concurrent.futures import ProcessPoolExecutor
#import consumer_one
#import consumer_two
import a
import time
consumer_one, consumer_two = a,a
if __name__ == '__main__':
pool = ProcessPoolExecutor()
jobs = [pool.submit(module.start) for module in (consumer_one, consumer_two)]
print(jobs)
j1, j2 = jobs
print(j1.running())
while all(j.running() for j in jobs):
time.sleep(1)
print("all is well...")
print("some one has died!") #I guess now you can do something much more clever :)
pool.shutdown()
exit(1)
阅读文档了解更多信息: https://docs.python.org/3/library/concurrent.futures.html
答案 1 :(得分:0)
经过几次测试后,我认为最好的解决方案是安装包http://supervisord.org/
在我的场景中,如果服务中断,我可以更轻松地管理重启,同时,我可以管理进程的不同日志并附加特定事件侦听器。
Supervisor有很多很好的功能来管理异步服务。