如果我安排 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
构造函数中,您正在设置 broker
和 backend
(芹菜将它们用作系统的一部分)
欲了解更多信息:http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html#application
如果我每分钟都安排任务,并且无法在规定时间内(一分钟)完成。任务会不会在队列中等待,会一直这样下去?如果发生这种情况,那么几个小时后它将超载。有没有解决此类问题的方法?
我为此使用节拍和工人组合。对于执行任务的较少记录,它工作正常。但是对于大型数据库,我认为这可能会导致问题。
任务分配给队列(例如 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
构造函数中,您正在设置 broker
和 backend
(芹菜将它们用作系统的一部分)
欲了解更多信息:http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html#application