Python 未调用动态创建的组的Chord
最近发现了芹菜的Python 未调用动态创建的组的Chord,python,celery,celery-task,chord,Python,Celery,Celery Task,Chord,最近发现了芹菜的任务。更换并试图利用它的力量我遇到了一个令人困惑的情况,根据芹菜的文档(以及各种各样的拉动请求/互联网上的问题),这应该是可行的。 假设我有以下代码: from celery import Celery, group app = Celery(broker='pyamqp://', backend='redis://localhost:6379/0') @app.task def to_char(seq): return map(chr, seq) @app.task
任务。更换并试图利用它的力量我遇到了一个令人困惑的情况,根据芹菜的文档(以及各种各样的拉动请求/互联网上的问题),这应该是可行的。
假设我有以下代码:
from celery import Celery, group
app = Celery(broker='pyamqp://', backend='redis://localhost:6379/0')
@app.task
def to_char(seq):
return map(chr, seq)
@app.task
def flatten(seqs):
final = list()
for seq in seqs:
final.extend(seq)
return final
@app.task(bind=True)
def combine(self):
sig = group([to_char.s([97]), to_char.s([98, 98])]) | flatten.s()
raise self.replace(sig)
显然,我简化了一点问题,但即使在这个简单的情况下,当我调用combine.delay().get()
时,我也希望收到[a,b,b]
对get()
的调用没有得到结果,而是无限期地挂起并查看工作日志-我可以看到对到\u char
的两个调用都被接收并成功完成,但没有对flatten
的调用
当我尝试单独执行它时(例如在Python控制台中),它会工作并返回预期结果,因此问题肯定出在我对任务机制的理解上。替换:
g = group([to_char.s([97]), to_char.s([98, 98])])
c = g | flatten.s()
c.delay().get() # -> [a, b, b]
非常感谢任何能对这个问题有所帮助的人