Python 3 - 执行多个队列使用者的最佳方法是什么?

时间:2016-09-13 16:57:21

标签: python-3.x rabbitmq

我正在学习python,所以我不是专家。

我有3个不同的脚本基本上做同样的事情。 每个脚本都将使用者附加到RabbitMQ队列并处理队列。

我想构建一个包装器来运行这3个脚本并构建一个自动启动系统的守护程序。

我的包装器也应该具有管理错误的逻辑,并且如果其中一个子进程死掉并收集每个子进程的输出,则启动子进程。

结构是这样的:

main.py
|-->consumer_one.py
|-->consumer_two.py
|-->consumer_three.py

您能否建议是否存在以简单方式管理流程分叉的包?

非常感谢mutch

2 个答案:

答案 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有很多很好的功能来管理异步服务。