芹菜比工人并发接受更多的任务

时间:2019-04-30 07:34:11

标签: celery airflow celery-task airflow-scheduler

我正在专用队列中运行一些长时间运行的任务。因此,没有短时间运行任务。当前,当我在一个队列上启动许多多个任务时,新任务将被提交给已经满的工作程序,即没有任务=工作程序并发。侦听相同队列的工作程序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:芹菜花enter image description here 屏幕截图2:气流Ui enter image description here

1 个答案:

答案 0 :(得分:0)

默认情况下,芹菜会prefetch 4 tasks at a time。在短期运行的任务中,此行为效率更高,因为工作人员不必为返回更多任务而不断返回队列,因为它已经保留了一些工作要做。对于像您这样长期运行的任务,很可能您想使用here

中记载的-O fair选项来“禁用”预取。