2016-04-22 26 views
0

Ich habe ein Problem mit meinem Django Sellerie-Anwendung. Nehmen wir an, ich habe zwei verwandte Modelle - Transaktion und Konto. Ich schiebe Transaktionen über meine API. Was ich erreichen möchte, ist, das Guthaben für ein bestimmtes Konto zu berechnen.Django Sellerie Anwendung mit Timer

Ich habe eine Sellerie Aufgabe, die Balance berechnet. Das Problem ist, dass ich für jedes Konto einen Timer benötige, zB auf. 60 Sekunden. Wenn die Transaktion für denselben Account kommt, wird der Timer wieder auf 60 gesetzt. Ich möchte es so machen, weil ich die gleiche Aufgabe nicht oft ausführen will. Wenn Transaktionen für ein angegebenes Konto 60 Sekunden lang nicht kommen, sollte die Aufgabe ausgeführt werden.

Irgendwelche architektonischen Vorschläge, wie man das erreicht? Tatsächlich habe ich nur keine Idee, wie ich diese "Timer" einrichten soll.

Danke für die Antworten!

Antwort

0

Sie können dem Verfahren django-celery-transactions folgen. Sie subclass the Task class, damit die Ausführungslogik angepasst werden kann.

Für Ihren Fall sollten Sie apply_async anpassen, um zu prüfen, ob in den folgenden 60 Sekunden Aufgaben in der Warteschlange ausgeführt werden (hierfür verwenden Sie die Celery API for inspecting workers). Wenn bereits eine geplante Aufgabe vorhanden ist, können Sie die Ausführung der aktuellen Aufgabe ignorieren. Wenn nicht, setzen Sie in der Zukunft eine Ausführungszeit von 60 Sekunden und rufen Sie damit die Methode super().apply_async(...) auf.

Verwandte Themen