Python 使用。将方法替换为芹菜子任务

Python 使用。将方法替换为芹菜子任务,python,celery,Python,Celery,我想解决芹菜的一个问题: 我有一个任务查询API中的ID,然后为每个ID启动一个子任务 我事先不知道ID是什么,或者有多少 对于每个id,我都会进行一次大型计算,然后将一些数据转储到数据库中 完成所有子任务后,我想运行一个摘要函数(将DB结果导出为Excel格式) 理想情况下,我不想阻止我的主要工作人员查询子任务的状态(如果您尝试这样做,芹菜会生气) 这个问题看起来非常相似(如果不相同?): 因此,使用“解决方案”(指向的链接),我尝试了以下测试脚本: # test.py from cele

我想解决芹菜的一个问题:

  • 我有一个任务查询API中的ID,然后为每个ID启动一个子任务
  • 我事先不知道ID是什么,或者有多少
  • 对于每个id,我都会进行一次大型计算,然后将一些数据转储到数据库中
  • 完成所有子任务后,我想运行一个摘要函数(将DB结果导出为Excel格式)
  • 理想情况下,我不想阻止我的主要工作人员查询子任务的状态(如果您尝试这样做,芹菜会生气)
这个问题看起来非常相似(如果不相同?):

因此,使用“解决方案”(指向的链接),我尝试了以下测试脚本:

# test.py
from celery import Celery, chord
from celery.utils.log import get_task_logger

app = Celery('test', backend='redis://localhost:45000/10?new_join=1', broker='redis://localhost:45000/11')
app.conf.CELERY_ALWAYS_EAGER = False

logger = get_task_logger(__name__)


@app.task(bind=True)
def get_one(self):
    print('hello world')
    self.replace(get_two.s())
    return 1


@app.task
def get_two():
    print('Returning two')
    return 2


@app.task
def sum_all(data):
    print('Logging data')
    logger.error(data)
    return sum(data)


if __name__ == '__main__':
    print('Running test')
    x = chord(get_one.s() for i in range(3))
    body = sum_all.s()
    result = x(body)

    print(result.get())
    print('Finished w/ test')
这对我不起作用。我得到一个错误:

AttributeError:“get_one”对象没有属性“replace”

请注意,我的后端URL中确实有new_join=1,但不是代理。如果我将其放在那里,我会得到一个错误:

TypeError:_init_params()获得意外的关键字参数“new_join”

我做错了什么?我使用的是Python 3.4.3和以下软件包:

amqp==1.4.6
anyjson==0.3.3
billiard==3.3.0.20
celery==3.1.18
kombu==3.0.26
pytz==2015.4
redis==2.10.3

Task.replace方法将添加到芹菜3.2中:(该changelog条目具有误导性,因为它表明Task.replace以前存在并且已被更改。)

好的。谢谢。是的,我已经阅读了changelogs,所以认为它在3.1中。我还通过source进行了搜索,并认为它在那里。