芹菜中的预取任务是否被确认?
Are prefetched tasks in celery being acknowledged?
我有以下设置:
- RabbitMQ 代理 + Django
- Celery with CELERYD_PREFETCH_MULTIPLIER=32(我有很多小任务
因此从性能的角度来看预取它们很有意义)
- CELERY_ACKS_LATE=False(任务不是幂等的)
我在 docker 容器中 运行 芹菜,所以当我重建 docker 芹菜工人时,他们没有正常关闭。这没关系,如果任务没有被确认,因为一旦工作人员在新的 docker 容器中再次启动,代理就会将它们发回,但在其他情况下它们 - 将会丢失。
在 flower 管理面板中,预取任务已收到状态。
我仔细阅读了官方文档和 related question 并且直觉上我觉得我的设置中的预取任务得到了认可。是这样吗?
使用 CELERY_ACKS_LATE=False
任务将在工作人员开始执行时立即确认:just before execution.
所以如果一个worker开始执行一个任务而你杀了它任务就会丢失。其他预取任务不会丢失,因为它们仍未被确认。
我有以下设置:
- RabbitMQ 代理 + Django
- Celery with CELERYD_PREFETCH_MULTIPLIER=32(我有很多小任务 因此从性能的角度来看预取它们很有意义)
- CELERY_ACKS_LATE=False(任务不是幂等的)
我在 docker 容器中 运行 芹菜,所以当我重建 docker 芹菜工人时,他们没有正常关闭。这没关系,如果任务没有被确认,因为一旦工作人员在新的 docker 容器中再次启动,代理就会将它们发回,但在其他情况下它们 - 将会丢失。
在 flower 管理面板中,预取任务已收到状态。
我仔细阅读了官方文档和 related question 并且直觉上我觉得我的设置中的预取任务得到了认可。是这样吗?
使用 CELERY_ACKS_LATE=False
任务将在工作人员开始执行时立即确认:just before execution.
所以如果一个worker开始执行一个任务而你杀了它任务就会丢失。其他预取任务不会丢失,因为它们仍未被确认。