Celery chord failing with ValueError: not enough values to unpack (expected 2, got 1)
Celery chord failing with ValueError: not enough values to unpack (expected 2, got 1)
我 运行ning celery v5.2.3 在 docker 容器中 运行ning ubuntu.
在这里,我试图让芹菜和弦发挥作用,但我所做的每一次尝试都给我:
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()
我的样本 运行s 进行了 9/10 次迭代,但随后失败了。
芹菜工人是运行:
celery -A scheduler worker -P eventlet -l info
你们谁能告诉我我做错了什么,因为我在互联网上找不到任何解释这个问题的东西?
对于将来遇到此问题的任何不幸的灵魂。
这个问题是因为我们有 celery 的 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,
}
然而,由于 celery 期望 children 字段是 children 或 None 的列表,我的问题是因为 children 字段总是由一个空列表。
通过将 children 更改为:
"children": self.encode(
self.current_task_children(request),
)
if len(self.current_task_children(request)) > 0
else None,
问题就解决了。
如果有人遇到这种情况,我希望这会有所帮助
我 运行ning celery v5.2.3 在 docker 容器中 运行ning ubuntu.
在这里,我试图让芹菜和弦发挥作用,但我所做的每一次尝试都给我:
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()
我的样本 运行s 进行了 9/10 次迭代,但随后失败了。
芹菜工人是运行:
celery -A scheduler worker -P eventlet -l info
你们谁能告诉我我做错了什么,因为我在互联网上找不到任何解释这个问题的东西?
对于将来遇到此问题的任何不幸的灵魂。
这个问题是因为我们有 celery 的 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,
}
然而,由于 celery 期望 children 字段是 children 或 None 的列表,我的问题是因为 children 字段总是由一个空列表。
通过将 children 更改为:
"children": self.encode(
self.current_task_children(request),
)
if len(self.current_task_children(request)) > 0
else None,
问题就解决了。
如果有人遇到这种情况,我希望这会有所帮助