簡體   English   中英

Celery不使用Redis處理Kubernetes中的任務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM