Ich versuche, bestehenden Sellerie-Gruppenruf in einen Akkord zu konvertieren, um Deadlocks zu verhindern. Der vorherige Code hatte Wiederholungen und eine Ablaufzeit. Ich habe es geschafft, dass der Akkord ohne diese Einstellungen funktioniert, aber wenn ich versuche, die Einstellung zu übernehmen, sehe ich nicht, dass die Aufgaben ausgeführt werden. Ich habe in der Dokumentation nichts darüber gesehen, wie man die gleichen Einstellungen auf den Akkord als Ganzes anwendet. Ich betreibe Sellerie Version 3.1.6.Aufgabenoptionen, die Aufgaben davon abhalten, im Sellerie-Akkord zu laufen
zurück Code:
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)
Arbeits Akkord (ohne Einstellungen):
jobs = chord([reset_device.s(topoid, dev_list[i],
waittime_list[i], skipflag) for i in range(len(dev_list))])(callback)
Nichtarbeits Akkord # 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)
Nichtarbeits Akkord # 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)
In den beiden Fällen # 1 und # 2 scheinen die Aufgaben im Akkord nicht ausgeführt zu werden. Wie kann ich die Ablaufzeit anwenden und für jede der im Akkord genannten Aufgaben wiederholen?
Können Sie Blume einrichten, um sicherzustellen, dass diese Aufgaben nicht ausgeführt wurden? – jheld
Was ist mit dem 'retry' innerhalb der' reset_device' Task? und definiere den Task Decorator als '@ app.task (max_retries = 3)' und was immer du brauchst .. – ItayB