2016-03-26 17 views
0

get id for current task tabanlıdır.Kereviz. Geçerli zincirin kimliğini alın

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

Nasıl zincirin içindeki görevin kimliği almak için:

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

Görev olarak tanımlanan:

ben gibi zincir diyoruz?

CELERY_ALWAYS_EAGER'u açmaya veya kapatmaya çalıştım.

UPD Ayrıca self.request boş context boştur.

cevap

1

Zinciri aramak, içindeki görevleri çağırır ve zincirdeki son görev sonucunu sonucunu döndürür. Bu

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

gibi zincir aradığınız zaman

o task2 sonucunu dönüyor. Bir önceki görevi erişmek için

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

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

chain.info kontrol ederek bunu doğrulamak, sen .parent özelliğini kullanmanız gerekir. chain.parent, önceki görevi size verir ve .id numaralı telefondan kimliği alabilirsiniz.

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'