2014-10-09 1 views
1

Task dependencyЗависимость от задачи в сельдерее

Возможна ли такая зависимость зависимости? 1 и 2 могут выполняться параллельно. 1a может выполняться только в том случае, если 1 закончен, но 12b может быть выполнено, если завершены как 1, так и 2.

Я знаю, что могу сделать 1 и 2 группу, а затем группу (1, 2) | 12b может быть цепочкой, но как сделать так, чтобы 1a начинался сразу после завершения 1, независимо от того, что происходит с 2?

ответ

0

Да, это возможно. Вот один из способов сделать это. Я использовал сельдерея сигнал task_success для подключения к функции, которая вызывает celery task

my_tasks.py

from celery import Celery, task 
from celery.signals import task_success 

c = Celery('my_tasks') 

@task 
def t1(): 
    print('t1') 

@task 
def t2(): 
    print('t2') 

@task 
def t11(): 
    print('t11') 

@task 
def t12(): 
    print('t12') 

def trigger_task(*args, **kwargs): 
    t11.s().delay() 

task_success.connect(trigger_task, sender=t1) 

Тестирование задачи:

In [6]: complex_task = chain(group(t1.s(), t2.s())(), t12.si().delay()) 

Вот лог.

[2014-10-10 12:31:05,082: INFO/MainProcess] Received task: my_tasks.t1[25dc70d2-263b-4e70-b9f2-56478bfedab5] 
[2014-10-10 12:31:05,083: INFO/MainProcess] Received task: my_tasks.t2[0b0c5eb6-78fa-4900-a605-5bfd55c0d309] 
[2014-10-10 12:31:05,084: INFO/MainProcess] Received task: my_tasks.t12[b08c616d-7a2d-4f7b-9298-2c8324b747ff] 
[2014-10-10 12:31:05,084: WARNING/Worker-1] t1 
[2014-10-10 12:31:05,084: WARNING/Worker-4] t2 
[2014-10-10 12:31:05,085: WARNING/Worker-3] t12 
[2014-10-10 12:31:05,086: INFO/MainProcess] Task my_tasks.t2[0b0c5eb6-78fa-4900-a605-5bfd55c0d309] succeeded in 0.00143978099914s: None 
[2014-10-10 12:31:05,086: INFO/MainProcess] Task my_tasks.t1[25dc70d2-263b-4e70-b9f2-56478bfedab5] succeeded in 0.00191083699974s: None 
[2014-10-10 12:31:05,087: INFO/MainProcess] Task my_tasks.t12[b08c616d-7a2d-4f7b-9298-2c8324b747ff] succeeded in 0.00184817300033s: None 
[2014-10-10 12:31:05,087: INFO/MainProcess] Received task: my_tasks.t11[a3e3f0c6-ac1f-4888-893a-02eee3b29585] 
[2014-10-10 12:31:05,088: WARNING/Worker-2] t11 
[2014-10-10 12:31:05,089: INFO/MainProcess] Task my_tasks.t11[a3e3f0c6-ac1f-4888-893a-02eee3b29585] succeeded in 0.000978848000159s: None 

Я пытался подключиться непосредственно к задаче, но it is throwing some error.