我从Celery doc中了解到,默认情况下,Celery会在执行任务之前确认消息。
Celery工作人员会检索多个任务消息,并将它们组合在一起,或者它只检索一个,确认一个并执行一个,然后检索下一个,确认并执行它?
如果是后者,对于处于绿色模式的工作者,当它正在执行任务并等待网络响应时,它是否会检索另一个任务消息并执行它,或者它只是等待第一个任务完成?
答案 0 :(得分:0)
在这里回答:https://github.com/celery/celery/issues/3394
有一个greenlet线程负责接收消息(任务 消费者),并且有一个greenlet工作线程池。
任务使用者收到一条任务消息并将其发送到池中, 然后接收另一条任务消息,将其发送到池中,依此类推。
池工作线程接收任务消息并确认 它通过向任务发送消息开始处理它 然后,任务使用者通过发送来确认任务
basic.ack
给经纪人。
- [消费者]收到任务消息
- [消费者]将任务消息委托给池
- [PoolWorker-1]收到任务讯息
- [PoolWorker-1]将ack发送给消费者(我现在正在处理此任务)
- [消费者]从池工作者处收到确认,并告诉经纪人确认消息。
这两个线程并行发生。只有经纪人 允许接收任务的连接确认消息,并且 代理连接不能在线程之间共享,所以只有 允许使用者线程读/写代理套接字。