我可能误解了它是如何工作的(这就是我要问的原因),但我认为当一个芹菜工人从RabbitMQ中消耗任务时它会锁定它 - 可以这么说 - 然后必须承认它完成任务就完成了。所以说我有4个工作人员都将预取设置为1,并且6个任务的队列需要很长时间。一旦我启动那些工作人员并且我跑了:
rabbitmqctl -q list_queues name messages messages_ready messages_unacknowledged
我希望看到类似的内容:
celery 6 2 4
表示4个任务正在运行(但尚未确认),2个已准备就绪。
我认为我的理解是错误的,因为我实际看到的是:
celery 2 0 2
因此,就好像在工作人员收到消息时,但在该工作人员完成处理该任务之前发生了确认。
总而言之,我的问题是,芹菜工人什么时候承认它有任务?似乎它曾经接收过该任务并开始研究它,而不是当它完成工作时在上面。有人可以证实吗?
答案 0 :(得分:15)
常见问题解答中提到了这一点,但我不能责怪你找不到它: http://docs.celeryproject.org/en/latest/faq.html#should-i-use-retry-or-acks-late
早期确认的默认行为是因为我们不想强制执行用户 写出幂等的任务。