所有,我试图强迫' RQ工作人员使用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包(之前的w.r.t.并发/ RQ工作效果很好)不再可用。但这给了我一个并发可能的线索。
答案 0 :(得分:2)
将我的评论从上面修改为答案......
使用supervisord
并行运行多个rqworker
进程的python-rq
python-rq
,所以请不要担心您是' 34;迫使"它。你实际上有正确的想法。
另一方面,编写自己的负载均衡算法是一种反模式:这正是numprocs
为您所做的。
如果你想在三个工人之间分配工作,那么他们都应该听同一个队列。尝试删除两个超级用户配置块,并在剩下的一个块中,将3
更改为public boolean contains(E value) {
Node current = root;
while (current != null) {
int comparison = value.compareTo(current.value);
if (comparison == 0) {
return true;
} else if (comparison < 0) {
current = current.left;
} else { //comparison > 0
current = current.right;
}
}
return false;
}
。如果快速向该队列提交三个作业,则应该看到三个工作程序同时执行。