2016-03-26 16 views
0

Basierend auf get id for current task.Sellerie. ID der aktuellen Kette erhalten

Ich nenne Kette wie:

chain = (nice_task.s(a=1) | 
     task2.s(a=2)).apply_async() 

Aufgabe wie folgt definiert:

@celery.task(bind=True) 
def nice_task(self, a): 
    print a 
    print self.request.id # None 
    return a 

Wie id Aufgabe innerhalb Kette zu bekommen?

Ich habe versucht, CELERY_ALWAYS_EAGER ein-/auszuschalten - ohne Wirkung.

UPD Auch self.request hat leer context.

Antwort

1

Der Aufruf der Kette ruft die darin enthaltenen Aufgaben auf und gibt das Ergebnis der letzten Aufgabe in der Kette zurück.

Wenn Sie Kette fordern wie diese

chain = (nice_task.s(a=1) | task2.s(a=2)).apply_async() 

es aufgrund der task2 zurückkehrt. Sie können dies überprüfen, indem chain.info

In [25]: chain.info 
Out[25]: 'task2' 

In [26]: chain.id 
Out[26]: 'bec26eff-2dfe-4203-aed2-a122d908c905' 

Überprüfung vorherige Aufgabe zugreifen zu können, müssen Sie .parent Attribut verwenden. chain.parent gibt Ihnen vorherige Aufgabe und Sie können ID erhalten von .id.

In [27]: chain.parent 
Out[27]: <AsyncResult: 242d338b-35fe-4f16-be07-36d0d8f2bb53> 

In [28]: chain.parent.info 
Out[28]: 'task1' 

In [29]: chain.parent.id 
Out[29]: '242d338b-35fe-4f16-be07-36d0d8f2bb53' 
Verwandte Themen