task_id in einer Sellerieaufgabe erhalten

8

Das ist wahrscheinlich eine blöde Frage, aber sie hat mich aus einem Ruby-Hintergrund ratlos gemacht.

Ich habe ein Objekt, das so aussieht, wenn ich versuche, es zu drucken.

%Vor%

Ich habe erwartet, dass der tatsächliche Wert der Eigenschaft task_id hier gedruckt wird. Wie komme ich zum tatsächlichen Wert?

UPDATE 1

%Vor%

Beste Grüße.

    
user1513388 18.09.2013, 12:55
quelle

3 Antworten

9

Kurzgeschichte, verwenden Sie in der Funktion scan scan.request.id .

Siehe Ссылка

    
Chris Johnson 18.09.2013, 15:40
quelle
12

Sie greifen auf die property der Klasse zu, während task_id auf a steht Eigenschaft von Instanzen von AsynchResult .

Um den Wert von task_id zu erhalten, müssen Sie zuerst eine Instanz dieser Klasse erstellen, danach wird Ihnen der Zugriff auf asynch_result_instance.task_id die echte ID zurückgeben.

In Ihrem aktualisierten Code:

%Vor%

Hier greifen Sie auf die Klasse zu, wie ich bereits erklärt habe. Was Sie möchten, ist eine Instanz der aktuell ausgeführten Aufgabe. Sie können celery.current_task verwenden, um das aktuell ausgeführte Aufgabenobjekt zu erhalten:

%Vor%

Oder, wenn Sie an der eindeutigen ID interessiert sind, verwenden Sie die request Attribut der dekorierten Funktion:

%Vor%

In diesem zweiten Fall verwenden Sie nicht eine lokale Variable namens scan , sonst werden Sie eine UnboundLocalError .

(Code nicht getestet, da ich celery nicht installiert habe.)

Die property s sind Deskriptoren , die für den attributbasierten Zugriff verwendet werden Getter / Setter-Methoden, damit Sie auf Daten wie:

zugreifen können %Vor%

Aber wenn der Code ausgeführt wird, kann der Setter oder Getter steuern, was passiert.

Sie können dies mit einer Dummy-Klasse überprüfen:

%Vor%     
Bakuriu 18.09.2013 13:03
quelle
7

Um Ihre Aufgaben "OO-ähnlicher" zu machen, könnten Sie das Argument bind verwenden, um einen Verweis auf self :

zu erhalten %Vor%

Bitte beachten Sie, dass self.request.id tatsächlich eine Instanz von AsyncTask ist. Um die Task-ID als string zu haben, sollten Sie self.request.id.__str__() .

verwenden

Aus Selleries Dokumentation (nach dem Beispiel):

  

Das Argument bind bedeutet, dass die Funktion eine "gebundene Methode" ist, damit Sie auf Attribute und Methoden der Aufgabentypinstanz zugreifen können.

    
Victor 04.08.2015 10:41
quelle

Tags und Links