[英]Celery Does Not Process Task in Kubernetes with Redis
我正在運行一個Kubernetes集群,其中包含三個Celery吊艙,並使用單個Redis吊艙作為消息隊列。 Celery版本4.1.0,Python 3.6.3,掌舵人的標准Redis pod。
在看似快速的任務涌入時,芹菜莢停止任何處理任務。 他們適合前幾個任務,但最終停止工作,我的任務掛起。
我的任務遵循以下格式:
@app.task(bind=True)
def my_task(some_param):
result = get_data(some_param)
if result != expectation:
task.retry(throw=False, countdown=5)
並且一般排隊如下:
from my_code import my_task
my_task.apply_async(queue='worker', kwargs=celery_params)
我的deployment.yaml
的相關部分:
command: ["celery", "worker", "-A", "myapp.implementation.celery_app", "-Q", "http"]
該集群和我的本地集群,這是我使用的唯一區別docker-compose
管理,是集群正在運行prefork
游泳池和本地我跑eventlet
池能夠把一個代碼覆蓋率報告。 我嘗試在集群上運行eventlet
,但是結果沒有區別,任務仍然掛起。
在Kubernetes中運行芹菜工作者是否缺少我的東西? 是否有可能會影響我的結果的錯誤? 是否有任何好的方法可以進入群集以查看此問題的實際情況?
在沒有apply_async
情況下運行celery任務使我得以調試此問題,這表明Celery任務中存在並發邏輯錯誤。 我強烈推薦這種調試Celery任務的方法。
代替:
from my_code import my_task
celery_params = {'key': 'value'}
my_task.apply_async(queue='worker', kwargs=celery_params)
我用了:
from my_code import my_task
celery_params = {'key': 'value'}
my_task(**celery_params)
這使我能夠找到並發問題。 發現錯誤后,我使用apply_async
將代碼轉換回異步方法調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.