首页 > 解决方案 > 如何使用 completed_count 跟踪 Celery 中的任务组完成情况?

问题描述

我正在尝试使用“completed_count()”来跟踪 Celery 组中剩余的任务数。

我的“客户”运行这个:

from celery import group
from proj import do

wordList=[]
with open('word.txt') as wordData:
     for line in wordData:
         wordList.append(line)

readAll = group(do.s(i) for i in wordList)

result = readAll.apply_async()
while not result.ready():
     print(result.completed_count())
result.get()

“word.txt”只是一个每行一个单词的文件。

然后我将芹菜工人设置为运行 do 任务:

@app.task(task_acks_late = True)
def do(word):
    sleep(1)
    return f"I'm doing {word}"

我的代理是 pyamqp,我使用 rpc 作为后端。

我认为它会为客户端的每个循环打印越来越多的任务,但我得到的只是“0”。

标签: taskcelerycompletion

解决方案


问题不在completed_count方法上。由于 result.ready()False在所有任务完成后仍然存在,因此您得到了零。似乎我们的后端有一个错误,githubrpc上有一个问题。考虑将后端设置更改为,正如我所见,它工作正常amqp


推荐阅读