总而言之,我正在尝试“强制” RQ工作人员使用主管进行同时执行。我的安装程序监督安装程序似乎运行良好,因为rq仪表板显示3个工作程序,3个PID和3个队列(每个工作程序/PID一个)。 Supervisord设置如下(仅显示工作程序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
问题是当我同时发送3个作业时,总运行时间是单个任务的x3(即总时间与任务数量成线性关系,缩放为x4,x5等)。似乎没有并发可用。我还通过将新作业发送到具有最少启动+排队作业最少的队列来实现原始负载平衡,该工作正常(观察到的作业在队列中平均分布)。
为什么此设置不允许并发?
关于我缺少的设置的任何注意事项吗?
请注意,随着我迁移到PY3,rq-gevent-worker软件包(在并发/RQ上较早使用时效果很好)不再可用,而PY3尚不支持gevent本身。但这为我提供了可能并发的线索。
最佳答案
使用supervisord
并行运行多个rqworker
进程是python-rq
中的intended pattern,因此不必担心您是在“强制”使用它。您实际上有正确的想法。
另一方面,编写自己的负载平衡算法是一种反模式:python-rq
正是为您服务的。
如果要在三个工作人员之间分配工作,那么他们都应该听同一个队列。尝试删除两个 super 用户配置块,然后在剩余的一个块中,将numprocs
更改为3
。如果您快速将三个作业提交到该队列,则应该看到三个 worker 同时执行。
关于python - 与主管进行RQ并发?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29928166/