2016-03-23 5 views
0

Ich versuche eine Sellerie-Aufgabe zu implementieren, die eine API aufrufen würde, die etwa 10-15 Sekunden zur Ausführung benötigt. Nach dem Aufruf der API muss ich das Ergebnis mit http-get abfragen. Jetzt möchte ich alle 2 Sekunden nach Ergebnissen suchen, was bedeutet, dass der Arbeiter für diese 2 Sekunden frei wäre. Kann ich Sellerie irgendwie sagen, dass dieser bestimmte Arbeiter für diesen Zeitraum frei sein würde? Lass es mich wissen, wenn ich mich nicht klar gemacht habe.Python - Kann ich einen Sellerie-Arbeiter programmatisch für eine gewisse Zeit frei machen?

+0

Sie meinen, zu sagen, dass Sie eine Aufgabe für 2 Sekunden verzögert werden soll? – AceLearn

+0

Ja. Stimmt. –

Antwort

1

Es gibt 2 Möglichkeiten, eine Sellerieaufgabe zu verzögern.

1st: 

>>> tomorrow = datetime.now() + timedelta(days=1) 
>>> add.apply_async(args=[10, 10], eta=tomorrow) 

2nd: 
>>> result = add.apply_async(args=[10, 10], countdown=3) 
>>> result.get() # this takes at least 3 seconds to return 

Quelle: https://ask.github.io/celery/userguide/executing.html#eta-and-countdown

+0

Also bedeutet das nicht, dass der Arbeiter, der ** add ** ausführt, für die nächsten 3 Sekunden beschäftigt ist? –

+0

Ich möchte den Worker freigeben, speichern Sie es Kontext und führen Sie es erneut in einer Verzögerung von 3 Sekunden, wenn die Antwort nicht keine ist. Für z.B. Sagen Sie, wenn ** add ** nur 1 Sekunde dauert, wird der Arbeiter für die nächsten 2 Sekunden frei sein? –

+0

Nein. Es bedeutet nicht, dass es 3 Sek. Lang beschäftigt ist. Aber wird nach 3 Sekunden ausgeführt – AceLearn

Verwandte Themen