Ich muss nach einem Countdown eine Sellerie-Aufgabe ausführen lassen, aber unter bestimmten Bedingungen diesen Countdown zurücksetzen können. Zum Beispiel möchte ich apply_async
mit countdown=15
aufrufen, aber wenn ein bestimmtes Ereignis eintritt, bevor die Aufgabe ausgeführt wird, möchte ich diesen Countdown erneut auf 15 Sekunden setzen.
Aus den Dokumenten und dem googlen könnte ich das erreichen, indem ich die Aufgaben-ID speichere und dann die Aufgabe widerrufe und neu erstelle, wenn das Ereignis eintritt. Ich habe mich gefragt, ob es einen eleganteren Ansatz dazu gibt.
Verwenden Sie einen Cache wie Redis, um einen Sperrschlüssel zu speichern. Wenn Sie apply_async-Inkrementwert des Schlüssels aufrufen. Wenn Sie diese Aufgabe in Sellerie ausführen, dekrementieren Sie diesen Wert. Wenn der Wert 0 ist, führen Sie die Aufgabe aus. Also, wenn es zwei Aufrufe von apply_async gab, ist Ihr Zähler 2 und die erste Ausführung der Aufgabe wird übersprungen.
Ich denke dieser Code kann Ihnen helfen .
Tags und Links django celery celery-task