芹菜中的预取任务是不是被确认?

Posted

技术标签:

【中文标题】芹菜中的预取任务是不是被确认?【英文标题】:Are prefetched tasks in celery being acknowledged?芹菜中的预取任务是否被确认? 【发布时间】:2017-07-01 04:50:58 【问题描述】:

我有以下设置:

RabbitMQ 代理 + Django CELERYD_PREFETCH_MULTIPLIER=32 的芹菜(我有很多小任务 因此从性能的角度来看,预取它们很有意义) CELERY_ACKS_LATE=False(任务不是幂等的)

我在 docker 容器中运行 celery,所以当我重建 docker celery 时,工作人员不会正常关闭。没关系,如果任务没有得到确认,因为一旦工人在新的 docker 容器中再次启动,经纪人就会将它们发回,但在其他情况下,它们 - 将会丢失。

在花管理面板中预取的任务已收到状态。

我仔细阅读了官方文档和related question,直觉上我觉得我的设置中的预取任务得到了承认。是这样吗?

【问题讨论】:

【参考方案1】:

CELERY_ACKS_LATE=False 任务将在 worker 开始执行时被确认:just before execution。

所以如果一个工人开始执行一个任务并且你杀死它,任务将会丢失。其他预取任务不会丢失,因为它们仍然未被确认。

【讨论】:

这听起来很合理,但是花中的预取任务被标记为“已接收” - 这是否意味着它们还没有开始执行? 我猜RECEIVED 在 Rabbitmq 中的意思是 Unacked。其他工作人员无法预取它们,因为它们不是Ready。但是如果工人在没有确认的情况下失去连接​​,他们将成为Ready 但是如果我重启 celery 服务器(硬重启),rabbitmq 怎么知道这些任务可以分配给其他节点呢? 这个question 可能会有用。 消费者关闭频道时,由rabbitmq自动完成。

以上是关于芹菜中的预取任务是不是被确认?的主要内容,如果未能解决你的问题,请参考以下文章

确认浏览器预取导致删除

如何关闭windows中缓存的预取?

Intel Core 2 Duo 的预取

Safari浏览器的预取解决方案?

text 常见的预取链接

是否需要请求 iOS 按需资源的预取标签?