【发布时间】:2015-05-13 23:46:47
【问题描述】:
我想运行一个由多个工作人员共享的 DatabaseScheduler-backed celerybeat 实例。 Redis 是代理。只有一个工人会收到一个计划任务,还是所有工人都会收到一个计划任务?谢谢!
【问题讨论】:
标签: python django redis celery message-queue
我想运行一个由多个工作人员共享的 DatabaseScheduler-backed celerybeat 实例。 Redis 是代理。只有一个工人会收到一个计划任务,还是所有工人都会收到一个计划任务?谢谢!
【问题讨论】:
标签: python django redis celery message-queue
您应该运行 celery beat 调度程序的单个实例,然后当它需要调度任务时,它会将消息放入消息代理队列(在您的情况下为 Redis)。队列默认为“celery”,但可以根据您的代码/设置为每个任务或每个任务实例配置。
当您启动一个或多个工作人员时,您可以根据需要告诉每个工作人员要监听哪些队列,但默认情况下,他们只会再次监听“芹菜”队列上的消息。当消息被推送到队列时,第一个可用的工作人员将收到来自代理的推送通知并执行它。代理将确保一次仅将单个任务实例推送给一个工作人员。
默认情况下,如果该工作人员在执行任务时崩溃,那么它将丢失。您还可以使用 CELERY_ACKS_LATE 设置更改该行为,这意味着如果工作人员崩溃,其当前任务将重新分配给下一个可用工作人员。
【讨论】:
@app.task(acks_late=True)为每个任务配置