如果我安排每分钟的任务,并且如果无法在时间内完成(一分钟)。任务会等待队列吗?如果发生这种情况,则几个小时后将被超载。是否有解决此类问题的解决方案?
我正在使用节拍和工人组合。较少的记录执行任务是正常工作的。但是对于大型数据库,我认为这可能会导致问题。
任务已分配给队列(例如兔子)。
工人是排队消费者,更多的工人(或同时发生的工人) - 可以并行处理更多的任务。
您的定期任务会产生相同类型的消息(我想),而您的芹菜路由器将它们路由到同一队列。只需将您的工人设置为消费该队列的消息,仅此而已。
celery worker -A celeryapp:app -l info -Q default -c 4 -n default_worker@%h -Ofair
在上面的示例中,我使用了-c 4
的四个(式为4个消费者/工人)的并发。您还可以开始移动工人,并让他们用-Q <queue_name>
从同一队列中消耗(在我的示例中是default
队列)。
编辑:使用芹菜(工作代码)时,您是启动Celery
对象。在Celery
构造函数中,您正在设置broker
和backend
(芹菜用作系统的一部分)有关更多信息:http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html#application