Erstellen Sellerie Aufgaben, die dann synchron laufen
Meine app sammelt eine Reihe von Telefonnummern auf einer Seite. Sobald der Nutzer auf den submit-button erstelle ich eine Sellerie-Aufgabe zu nennen, jede Zahl und geben Sie eine erinnerungsmeldung, dann leiten Sie Sie zu einer Seite, wo Sie sehen können, die live-updates über den Anruf. Ich bin mit web-sockets zur live-update den status jedes Anrufs, und müssen die Aufgaben, die synchron ausgeführt, da ich nur Zugang zu wählen von einer Nummer.
Also einmal den ersten Anruf/Vorgang abgeschlossen ist, möchte ich das nächste Feuer aus.
Ich warf einen Blick auf CELERY_ALWAYS_EAGER Einstellungen, aber es ging gerade durch die erste iteration und gestoppt.
@task
def reminder(number):
# CODE THAT CALLS NUMBER HERE....
def make_calls(request):
for number in phone_numbers:
reminder.delay(number)
return redirect('live_call_updates')
InformationsquelleAutor der Frage Austin | 2014-10-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
wenn Sie wollen, um Feuer-jeder Aufruf einer nach dem anderen, warum nicht Sie wickeln alle Anrufe in einer Aufgabe
InformationsquelleAutor der Antwort srj
Wenn man sich die Sellerie DOCS auf Aufgaben Sie sehen, zu nennen, eine Aufgabe synchronosuly, verwenden Sie die apply () - Methode im Gegensatz zu den apply_async () - Methode.
Also in deinem Fall könntest du schreiben:
Den DOCS auch zu beachten, dass:
If the CELERY_ALWAYS_EAGER setting is set, it will be replaced by a local apply() call instead.
Dank @JivanAmara, die in den Kommentaren bekräftigt, dass bei der Verwendung von apply(), die Aufgabe, die lokal ausgeführt wird(der server/computer, in dem die genannt werden). Und dies kann Auswirkungen, wenn Sie ausgeführt werden soll, Ihre Aufgaben auf mehreren Servern/Computern.
InformationsquelleAutor der Antwort Komu