2016-04-09 14 views
1

Ich habe eine funktionierende Kette, aber wenn ich apply_async() hinzufüge, führt es nur die erste Aufgabe aus.Warum führt Sellerie nur die erste Aufgabe in der Kette?

@task(name='run_a', delay=True) 
def run_a(**kwargs): 
    do_whatever(kwarg['var']) 
    return 

@task(name='run_b', delay=True) 
def run_b(**kwargs): 
    # ... 
    return 

@task(name='run_c', delay=True) 
def run_c(**kwargs): 
    # ... 
    return 

Mit einer Kette Befehl:

ret = chain(
    run_a.s(**kwargs), 
    run_b.s(**kwargs), 
    run_b.s(**kwargs) 
).apply_async() 
  • Ohne die apply_async alles funktioniert (synchron) wie erwartet.
  • 'Kwargs' ist ein Diktat.
+0

Kann jemand bestätigen, es ist in Bezug auf die kwargs DIKT? http://stackoverflow.com/questions/14968265/sellery-task-chain-and-accessing-kwargs – GerardJP

+0

Beim Aufruf von 'run_b' erhalte ich einen TypeError im Sellery Worker Log:' TypeError: run_b() nimmt genau 0 Argumente (8 gegeben) ' – GerardJP

Antwort

0

Während Sellerie validiert Ihre Aufgaben vor der Ausführung, für eine func *args und **kwargs arbeiten werden erwartet.

# Kwargs was filled, I added an empty args list 
args = [] 
kwargs = { 
    'some': 'intelligent data', 
    } 

Beim Aufruf der Funktionen mit den beiden, es wie erwartet funktioniert:

ret = chain(
    run_a.s(*args, **kwargs), 
    run_b.s(*args, **kwargs), 
    run_b.s(*args, **kwargs) 
).apply_async()