Python 芹菜有时把所有的工作都交给一个工人

Python 芹菜有时把所有的工作都交给一个工人,python,multithreading,celery,Python,Multithreading,Celery,我们有一个系统,它运行一系列长任务(有时长达10分钟),有时(我还不能重现它,但我在日志中看到它)芹菜的行为是这样的(我提供了一个发生事情的“时间线”示例): 所有工人都是自由的 很多工作都是靠芹菜做的 芹菜在工人之间平均分配工作 芹菜自动缩放以适应新工作 所有(或几乎所有)工作都能正常结束 芹菜将所有新工作分配给一名工人 当所有其他工人都闲着的时候,等待一个过度工作的工人的工作会被延迟 过度工作的工人被芹菜杀死后,一切恢复正常 正因为如此,一些工作会被推迟,有时甚至是半小时 这就是我们经营

我们有一个系统,它运行一系列长任务(有时长达10分钟),有时(我还不能重现它,但我在日志中看到它)芹菜的行为是这样的(我提供了一个发生事情的“时间线”示例):

  • 所有工人都是自由的
  • 很多工作都是靠芹菜做的
  • 芹菜在工人之间平均分配工作
  • 芹菜自动缩放以适应新工作
  • 所有(或几乎所有)工作都能正常结束
  • 芹菜将所有新工作分配给一名工人
  • 当所有其他工人都闲着的时候,等待一个过度工作的工人的工作会被延迟
  • 过度工作的工人被芹菜杀死后,一切恢复正常
正因为如此,一些工作会被推迟,有时甚至是半小时

这就是我们经营芹菜的方式:

celery -A application worker -l INFO --autoscale=100,12

celery -A application beat -l INFO
我们用主管来管理一切。芹菜经纪人是兔子

这种行为的原因是什么?如何避免


谢谢

我也在我的系统上看到过这种情况。我不认为有任何方法可以直接解决这个问题,但是,如果您有那么长时间运行的任务,您可能希望将芹菜上的prefetch\u乘数设置设置设置得更低。这将导致在给定的时间内更少的作业落在工人身上。@user2097159您是对的,将prefetch_乘数设置为1似乎可以解决长跑者的问题。谢谢