我正在一个运行ubuntu的docker容器中运行celeniv2.2.3。
在这里,我试图让芹菜和弦发挥作用,但我的每一次尝试都给了我:
File "/usr/local/lib/python3.7/site-packages/celery/result.py", line 1056, in result_from_tuple
res, nodes = r
ValueError: not enough values to unpack (expected 2, got 1)
在这个错误之后,和弦继续重试:
retry: Retry in 1.0s: ValueError('not enough values to unpack (expected 2, got 1)')
我尝试运行的任务如下:
@celery_app.task(shared=False)
def add(x, y):
return x + y
@celery_app.task(shared=False)
def tsum(numbers):
return numbers
@celery_app.task(name="celery.test")
def test():
x = chord([add.s(i, i) for i in range(10)], body=tsum.s())
r = x.apply_async()
r.get()
我的示例运行了9/10次迭代,但后来失败了。
芹菜工人正在运行:
celery -A scheduler worker -P eventlet -l info
你们中的任何人能告诉我我做错了什么吗?因为我在互联网上找不到任何解释这个问题的东西?
对于将来遇到这个问题的不幸灵魂。
这个问题的原因是我们为芹菜定制了mongo后端实现。在这里,我们定义了任务的元字段如下:
meta = {
"_id": task_id,
"status": status,
"result": result,
"date_done": datetime.utcnow(),
"traceback": traceback,
"children": self.encode(
self.current_task_children(request),
),
"task_name": task_name,
"task_args": task_args,
"task_kwargs": task_kwargs,
"worker": worker,
}
然而,由于芹菜希望children字段是一个children列表或None,我的问题是因为children字段总是由一个空列表填充。
通过将儿童更改为:
"children": self.encode(
self.current_task_children(request),
)
if len(self.current_task_children(request)) > 0
else None,
这个问题将会得到解决。
我希望这将有所帮助,如果有人应该体验这个