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