2016-04-25 4 views
0

Ich versuche, einige Sachen aufzuräumen, nachdem ich eine laufende Aufgabe innerhalb des Selleries töte. Ich schlage zur Zeit 2 Probleme:Wie kann ich in Sellery + Python auf Task-Parameter von der task_revoked-Funktion zugreifen?

1) Innerhalb der Aufgabe Funktion Körper entzogen, wie kann ich Zugriff auf die Parameter erhalten, die die Aufgabe Funktion aufgerufen wurde: so zum Beispiel, wenn die Aufgabe wie folgt definiert ist:

@app.task() 
def foo(bar, baz): 
    pass 

Wie bekomme ich Zugriff auf bar und baz innerhalb der task_revoked.connect Code?

2) Ich möchte eine Aufgabe nur dann beenden, wenn ihr Zustand alles andere als X ist. Das bedeutet, die Aufgabe einerseits zu prüfen und andererseits den Status zu setzen. Den Zustand zu überprüfen könnte ich wahrscheinlich tun, aber ich habe Schwierigkeiten, den Kontext innerhalb des Aufgabenfunktionskörpers zu verstehen.

Wenn ich foo wie folgt definieren:

@app.task(bound=True) 
def foo(self, bar, baz): 
    pass 

und nennen es aus sagen .... Flask wie foo(bar, baz), dann werde ich eine Fehlermeldung erhalten, dass der dritte Parameter erwartet wird, die der Dekorateur bedeutet tut Fügen Sie keinen Kontext automatisch über den Parameter self hinzu.

die App einfach als celery.Celery()

Vielen Dank im Voraus

von Request-Objekt

Antwort

1

Sie können Aufgaben args bekommen definiert.

from celery.signals import task_revoked 

@task_revoked.connect 
def my_task_revoked_handler(sender=None, body=None, *args, **kwargs): 
    print(kwargs['request'].args) 

Dies gibt die Argumente für die Aufgabe aus.

Update:

Sie haben bind nicht bound zu verwenden.

@app.task(bind=True) 
def foo(self, bar, baz): 
+0

Die Sache ist die Sellerie docs eine Art von Klasse Interaktion zeigen, aber nicht mehr Details anders als das geben: http://docs.celeryproject.org/en/master/userguide/tasks.html#context. Wenn ich versuche, meine Funktionen einfach in eine Klasse zu schieben und sie aufzurufen, wird das Selbst kein Zustandsargument haben, was darauf hindeutet, dass der Dekorator nichts Zusätzliches hinzufügt. –

+0

@omu_negru Sieht so aus, als gäbe es einen Tippfehler in Ihrem Code aktualisierte Antwort. – ChillarAnand

+0

das hat es tatsächlich getan. Vielen Dank, Mann, hätte das nicht verstanden –

Verwandte Themen