2
我從Celery doc瞭解到,默認情況下,Celery會在執行任務之前確認消息。Celery獲取任務消息並執行的策略是什麼?
芹菜工作人員是否會檢索多個任務消息並將它們組合在一起,或者只是檢索一個,確認一個並執行一個,然後檢索下一個,確認並執行它?
如果是後者,對於greenlet模式的工作者,當它執行任務並等待網絡響應時,它是否會檢索另一個任務消息並執行它,或者只是等待第一個任務完成?
我從Celery doc瞭解到,默認情況下,Celery會在執行任務之前確認消息。Celery獲取任務消息並執行的策略是什麼?
芹菜工作人員是否會檢索多個任務消息並將它們組合在一起,或者只是檢索一個,確認一個並執行一個,然後檢索下一個,確認並執行它?
如果是後者,對於greenlet模式的工作者,當它執行任務並等待網絡響應時,它是否會檢索另一個任務消息並執行它,或者只是等待第一個任務完成?
在這裏找到答案:https://github.com/celery/celery/issues/3394
有一個greenlet線程負責接收消息(任務 消費者),並有greenlet工作者線程池。
任務使用者接收到一個任務消息並將其發送到池中,然後 接收另一個任務消息並將其發送到池中,依此類推。
池工作者線程接收任務消息,並承認 它開始通過發送消息到任務 消費者做這個工作,任務然後消費者通過發
basic.ack
給代理的任務。
- [消費者]接收任務消息
- [消費者]代表任務消息彙集
- [PoolWorker-1]接收任務消息
- [PoolWorker-1]發送ACK返回給消費者(I現在正在處理此任務)
- [消費者]從池工作者處收到確認,並通知經紀人確認消息。
這兩個線程並行發生。只有中介 接收任務的連接被允許確認消息,並且 代理連接不能在線程之間共享,因此只有 消費者線程被允許讀/寫代理套接字。