芹菜工人何时向RabbitMQ确认其有任务?

芹菜工人何时向RabbitMQ确认其有任务?,rabbitmq,celery,Rabbitmq,Celery,我可能误解了它是如何工作的(这就是为什么我要问的),但我认为当芹菜工人使用RabbitMQ的任务时,它会对其进行锁定——可以这么说——然后必须承认它完成了任务。假设我有4个工人,他们的预取设置都是1,队列中有6个任务,这需要很长时间。一旦我启动这些工人并运行: rabbitmqctl -q list_queues name messages messages_ready messages_unacknowledged 我希望看到这样的情况: celery 6 2 4

我可能误解了它是如何工作的(这就是为什么我要问的),但我认为当芹菜工人使用RabbitMQ的任务时,它会对其进行锁定——可以这么说——然后必须承认它完成了任务。假设我有4个工人,他们的预取设置都是1,队列中有6个任务,这需要很长时间。一旦我启动这些工人并运行:

rabbitmqctl -q list_queues name messages messages_ready messages_unacknowledged
我希望看到这样的情况:

celery  6       2       4
指示4个任务正在运行(但尚未确认),2个任务已准备好使用

我认为我的理解是错误的,因为我实际上看到的是:

celery  2       0       2
因此,这就好像确认发生在工作人员收到消息时,但在该工作人员完成该任务之前


总而言之,我的问题是,芹菜工人什么时候承认自己有任务?似乎是在收到任务并开始工作后,而不是在完成任务后。有人能确认吗?

常见问题解答中提到了这一点,但我不能责怪你没有找到它:

早期确认的默认行为存在,因为我们不想强制用户
写幂等任务。

太棒了,正是我想要的。谢谢你的芹菜,顺便说一句,太棒了。是啊,我想用Python标记太宽了,去掉了那个标记。