Celery获取任务消息并执行的策略是什么?

时间:2016-08-10 06:22:52

标签: python celery

我从Celery doc中了解到,默认情况下,Celery会在执行任务之前确认消息。

Celery工作人员会检索多个任务消息,并将它们组合在一起,或者它只检索一个,确认一个并执行一个,然后检索下一个,确认并执行它?

如果是后者,对于处于绿色模式的工作者,当它正在执行任务并等待网络响应时,它是否会检索另一个任务消息并执行它,或者它只是等待第一个任务完成?

1 个答案:

答案 0 :(得分:0)

在这里回答:https://github.com/celery/celery/issues/3394

  

有一个greenlet线程负责接收消息(任务   消费者),并且有一个greenlet工作线程池。

     

任务使用者收到一条任务消息并将其发送到池中,   然后接收另一条任务消息,将其发送到池中,依此类推。

     

池工作线程接收任务消息并确认   它通过向任务发送消息开始处理它   然后,任务使用者通过发送来确认任务   basic.ack给经纪人。

     
      
  • [消费者]收到任务消息
  •   
  • [消费者]将任务消息委托给池
  •   
  • [PoolWorker-1]收到任务讯息
  •   
  • [PoolWorker-1]将ack发送给消费者(我现在正在处理此任务)
  •   
  • [消费者]从池工作者处收到确认,并告诉经纪人确认消息。
  •   
     

这两个线程并行发生。只有经纪人   允许接收任务的连接确认消息,并且   代理连接不能在线程之间共享,所以只有   允许使用者线程读/写代理套接字。