2016-03-23 17 views
1

Angenommen, es gibt eine periodische Aufgabe, die jede Stunde ausgeführt werden soll. Ein Mitarbeiter empfängt die Aufgaben und beginnt mit der Verarbeitung. Während der Bearbeitung der Aufgabe wird der selleryd-Prozess (gesteuert über supervisord) neu gestartet (supervisorctl restart all). Obwohl die Ausführung der Aufgabe nie beendet wurde, wird sie nicht erneut ausgeführt.Wie wird eine periodische Aufgabe in die Warteschlange gestellt, wenn sie in Sellerie beendet wird?

Wie kann ich die periodische Aufgabe sofort wieder einreihen und verhindern, dass mehrere Versionen der Aufgaben gleichzeitig ausgeführt werden?

Antwort

0

Es kann eine schönere Art und Weise, es zu tun, aber man könnte verwenden nur die periodische Aufgabe eine regelmäßige Aufgabe in der Warteschlange zu erstellen (zB my_actual_task.defer(…)), die aus der Warteschlange entfernt werden nicht, bis er abgeschlossen ist (vorausgesetzt, Sie verwenden acks_late).

Wenn Sie nicht acks_late verwenden, können Sie den Großteil der Aufgabe in einen Versuch setzen, und in die entsprechende finally setzen Sie eine my_actual_task.retry().

In jedem Fall sollten Sie im Allgemeinen vermeiden, Mitarbeiter zu töten, ohne ihnen die Möglichkeit zu geben, das zu beenden, was sie tun.

Verwandte Themen