RQ与主管的一致性?

2024-09-26 22:07:54 发布

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

总之,我试图用supervisord“强制”RQ工人同时执行。我的设置supervisord设置似乎运行得很好,因为rq仪表板显示了3个worker、3个PID和3个队列(每个worker/PID一个)。主管设置如下(仅显示1号工人设置,此设置下定义了2名工人):

[program:rqworker1]
command = rqworker 1 
process_name = rqworker1-%(process_num)s
numprocs = 1 
user = username 
autostart = True
stdout_logfile=/tmp/rqworker1.log
stdout_logfile_maxbytes=50MB

RQ workers running under supervisord

问题是当我同时发送3个作业时,总运行时间是单个任务的3倍(即总时间与任务数成线性关系,可扩展到x4、x5等)。似乎没有并发可用。我还实现了一个基本的负载平衡,通过将新的作业发送到具有最小启动+排队作业的队列,这很好(观察到作业在队列中平均分布)。在

为什么这个设置不允许并发?在

关于我丢失的装置有什么考虑吗?在

请注意,由于我迁移到了PY3,并且gevent本身在PY3上还不受支持,rqgevent worker包(在早期的w.r.t.concurrency/rq中运行得很好)不再可用。但这给了我一个线索,即并发是可能的。在


Tags: 队列stdout作业时间py3processpidrq
1条回答
网友
1楼 · 发布于 2024-09-26 22:07:54

Modifying my comment from above into an answer...

使用supervisord并行运行多个rqworker进程是python-rq中的intended pattern,所以不要担心你在“强迫”它。你真的有正确的想法。在

另一方面,编写自己的负载平衡算法是一种反模式:这正是python-rq为您做的。在

如果你想把工作分给三个工人,那么他们应该都听同一个队列。尝试删除两个supervisor配置块,在剩下的一个块中,将numprocs更改为3。如果您快速向该队列提交三个作业,您应该看到三个工作线程同时执行。在

相关问题 更多 >

    热门问题