django:Celery 如何通过 ID 获取任务结果列表
django: Celery how to get a list of task results by their ids
想看看是否有办法优化 celery 任务结果检查的过程。
比如我有如下代码:
for task_id in tasks: # tasks is a list of celery task ids
res = app.AsyncResult(task_id)
if res.successful():
tasks_ids[task_id] = res.result # here I am storing task results
当前方法的问题是我必须遍历 celery 任务并一项一项地检查它们。而且我使用的是数据库结果后端,它会为每个 celery taskid 生成一个查询(至少我是这么认为的)。
所以我想检查是否有一种方法可以一次检索所有结果?在那儿。是否有使用列表操作的 app.AsyncResult() 类似物?
Celery 有一个 ResultSet class 来处理这个,它有 "join()" 和 "native_join()" 方法来做到这一点。
正如文档所说,有一个缺点,数据库后端没有实现 "native_join()" (这些后端确实实现了它:amqp、Redis 和缓存),因此 ResultSet 可能非常昂贵,类似于您当前的方法。顺便说一下,我想你可以看看文档和 API 看看你是否找到了可以帮助你的东西。
我不知道将这种支持添加到数据库后端有多难(您需要像 the API says 所说的那样实施 "get_many()"。但是,您可以评估更改后端。
希望对您有所帮助!
想看看是否有办法优化 celery 任务结果检查的过程。
比如我有如下代码:
for task_id in tasks: # tasks is a list of celery task ids
res = app.AsyncResult(task_id)
if res.successful():
tasks_ids[task_id] = res.result # here I am storing task results
当前方法的问题是我必须遍历 celery 任务并一项一项地检查它们。而且我使用的是数据库结果后端,它会为每个 celery taskid 生成一个查询(至少我是这么认为的)。
所以我想检查是否有一种方法可以一次检索所有结果?在那儿。是否有使用列表操作的 app.AsyncResult() 类似物?
Celery 有一个 ResultSet class 来处理这个,它有 "join()" 和 "native_join()" 方法来做到这一点。 正如文档所说,有一个缺点,数据库后端没有实现 "native_join()" (这些后端确实实现了它:amqp、Redis 和缓存),因此 ResultSet 可能非常昂贵,类似于您当前的方法。顺便说一下,我想你可以看看文档和 API 看看你是否找到了可以帮助你的东西。 我不知道将这种支持添加到数据库后端有多难(您需要像 the API says 所说的那样实施 "get_many()"。但是,您可以评估更改后端。
希望对您有所帮助!