我正在尝试将现有的 celery 组调用转换为和弦以防止死锁。之前的代码有重试和过期时间。我设法在没有这些设置的情况下使和弦工作,但是当我尝试应用设置时,我看不到正在运行的任务。我在文档中没有看到任何关于在整个和弦上应用相同设置的内容。我正在运行 celery 3.1.6 版。
以前的代码:
jobs = group([reset_device.s(topoid, dev_list[i],
waittime_list[i], skipflag) for i in range(len(dev_list))]
).apply_async(expires=waittime, retry=True, retry_policy={
'max_retries': 3,
'interval_start': 0.5,
'interval_step': 0.2,
'interval_max': 0.2})
results = jobs.join_native(timeout=waittime + 600, propagate=True)
工作和弦(无设置):
jobs = chord([reset_device.s(topoid, dev_list[i],
waittime_list[i], skipflag) for i in range(len(dev_list))])(callback)
非工作和弦#1:
jobs = chord([reset_device.s(topoid, dev_list[i], waittime_list[i],
skipflag).set(expires=datetime.now() + timedelta(seconds=waittime)).set(retry=True).set(retry_policy=retry_policy)
for i in range(len(dev_list))])(callback)
非工作和弦#2
jobs = chord([reset_device.subtask(args=(topoid, dev_list[i], waittime_list[i],skipflag),
expires=datetime.now()+timedelta(seconds=waittime), retry=True, retry_policy=retry_policy)
for i in range(len(dev_list))])(callback)
在 #1 和 #2 情况下,和弦中的任务似乎都没有运行。如何为和弦中调用的每个任务应用过期时间并重试?