我正在专用队列中运行一些长时间运行的任务。因此,没有短时间运行任务。当前,当我在一个队列上启动许多多个任务时,新任务将被提交给已经满的工作程序,即没有任务=工作程序并发。侦听相同队列的工作程序2仍然具有较少的任务,可以接受更多的任务。理想情况下,任务应该交给工作人员2。
此行为的原因是什么?是因为预取吗?
我们进一步看到,已提交给工作人员1的任务已经完成,该任务在某个时间(即2小时左右)之后移交给工作人员2。为什么会这样?为什么2小时后呢?有没有一种方法可以减少任务从工人1到工人2的时间。
我的最新确认设置为true 并且工作人员的可见性超时= 6小时。 经纪人是redis。 芹菜版本4.2.1
我附上了一些截图来捕捉这种行为: 我的另一个工作人员仍然空着,但转到了已经满的工作人员
我只能在此链接http://docs.celeryproject.org/en/latest/userguide/optimizing.html#reserve-one-task-at-a-time
中对此进行讨论请检查Trailblazer.streaming.growth_fortune Trailblazer-growth-fortune-stream-0001 2019-04-25T10:10:00作为示例。 该任务在10:18排队到工作人员1,然后在2小时后,它在12:20开始在工作人员2上运行。 截图1:芹菜花 屏幕截图2:气流Ui
答案 0 :(得分:0)
默认情况下,芹菜会prefetch 4 tasks at a time。在短期运行的任务中,此行为效率更高,因为工作人员不必为返回更多任务而不断返回队列,因为它已经保留了一些工作要做。对于像您这样长期运行的任务,很可能您想使用here
中记载的-O fair
选项来“禁用”预取。