如果我安排 celery 每分钟执行一次任务,但它无法及时完成怎么办?

What if i schedule tasks for celery to perform every minute and it is not able to complete it in time?

如果我每分钟都安排任务,并且无法在规定时间内(一分钟)完成。任务会不会在队列中等待,会一直这样下去?如果发生这种情况,那么几个小时后它将超载。有没有解决此类问题的方法?

我为此使用节拍和工人组合。对于执行任务的较少记录,它工作正常。但是对于大型数据库,我认为这可能会导致问题。

任务分配给队列(例如 RabbitMQ)。

Worker是队列的消费者,更多的Worker(或者高并发的Worker)——更多的任务可以并行处理。

你的周期性任务产生相同类型的消息(我猜)并且你的 celery 路由器将它们路由到同一个队列。 只需将您的工作人员设置为使用该队列中的消息即可。

celery worker -A celeryapp:app -l info -Q default -c 4 -n default_worker@%h -Ofair

在上面的示例中,我使用 -c 4 实现四个并发(相当于 4 consumers/workers)。您还可以开始移动工作人员并让他们使用 -Q <queue_name> 从同一个队列中消费(在我的示例中是 default 队列)。

编辑: 使用 celery(工作代码)时,您将启动 Celery 对象。在 Celery 构造函数中,您正在设置 brokerbackend (芹菜将它们用作系统的一部分) 欲了解更多信息:http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html#application