总而言之,我正在尝试“强制”RQ 工作人员使用 supervisord 同时执行。我的设置 supervisord 设置似乎工作正常,因为 rq-dashboard 显示 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 并且 PY3 尚不支持 gevent 本身时,rq-gevent-worker 包(在早期的并发/RQ 上运行良好)不再可用。但这给了我一个线索,即并发是可能的。