尝试使用ID和AMQP后端检索Celery GroupResult

时间:2015-11-21 03:01:30

标签: python celery celery-task

在使用带有RabbitMQ的Celery时,我遇到了一个非常棘手的问题。

我有类似的东西:

from celery import group
group_of_tasks = group(task.s(x) for x in job_list)
result = group_of_tasks.delay()
print result.id  # let's call this d453359d...

以上工作正常,没有问题,我可以查询该组的状态以及result.results中的各个AsyncResults。

但是,如果我尝试在单独的控制台中执行以下操作:

from celery.result import GroupResult
x = GroupResult.restore('d453359d...')

我收到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\celery\result.py", line 806, in restore
     ).restore_group(id)
  File "C:\Python27\lib\site-packages\celery\backends\amqp.py", line 297, in restore_group
    'restore_group is not supported by this backend.')
NotImplementedError: restore_group is not supported by this backend.

我在Retrieving GroupResult from taskset_id in Celery?中遇到了类似的问题,其中提到了.save,但使用该问题也会导致NotImplementedError被抛出。

celery.backends.amqp中定义的AMQP后端的源代码如下:

def save_group(self, group_id, result):
    raise NotImplementedError(
        'save_group is not supported by this backend.')

def restore_group(self, group_id, cache=True):
    raise NotImplementedError(
        'restore_group is not supported by this backend.')

所以,我的问题是,我是否无法仅使用GroupResult ID重新创建一组结果?唯一的方法是将每个AsyncResults的ID存储在组中并查询每个ID?

或者我只是错过了一些非常明显的东西?

我在Windows上使用RabbitMQ在Python 2.7.10上运行Celery。

0 个答案:

没有答案