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进行了搜索,并认为它在那里。