一个芹菜击败了,许多工人?

时间:2015-03-11 23:26:08

标签: python django redis celery message-queue

我想运行由多个工作人员共享的单个DatabaseScheduler支持的celerybeat实例。 Redis是经纪人。只有一名工人会收到预定的任务,还是所有员工都会收到预定的任务?谢谢!

1 个答案:

答案 0 :(得分:2)

您应该运行芹菜节拍调度程序的单个实例,然后在计划任务的时候,它会在消息代理队列(在您的情况下为Redis)上放置一条消息。默认情况下,队列是“celery”,但可以根据您的代码/设置为每个任务或每个任务实例配置。

启动一个或多个工作人员时,如果需要,可以告诉每个人哪个队列要收听,但默认情况下他们只会再次侦听“celery”队列中的消息。当消息被推送到队列时,第一个可用的工作程序将从代理接收推送通知并执行它。代理将确保一次只将一个任务实例推送给一个工作者。

默认情况下,如果该工作程序在执行任务时崩溃,那么它将丢失。您还可以使用CELERY_ACKS_LATE设置更改该行为,这意味着如果工作人员崩溃其当前任务将被重新分配给下一个可用工作人员。