为什么 Celery 只运行链中的第一个任务?

Ger*_*dJP 5 django celery chain

我有一个工作链,但是当我添加apply_async()它时,它只执行第一个任务。

@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
Run Code Online (Sandbox Code Playgroud)

使用链命令:

ret = chain(
    run_a.s(**kwargs),
    run_b.s(**kwargs),
    run_b.s(**kwargs)
).apply_async()
Run Code Online (Sandbox Code Playgroud)
  • 如果没有,apply_async一切都会按预期工作(同步)。
  • 'kwargs' 是一个字典。

Ger*_*dJP 0

Celery 在执行之前会验证您的任务,以便函数能够正常工作*args并且**kwargs符合预期。

# Kwargs was filled, I added an empty args list
args = []
kwargs = {
    'some': 'intelligent data',
    }
Run Code Online (Sandbox Code Playgroud)

当同时调用这两个函数时,它会按预期工作:

ret = chain(
    run_a.s(*args, **kwargs),
    run_b.s(*args, **kwargs),
    run_b.s(*args, **kwargs)
).apply_async()
Run Code Online (Sandbox Code Playgroud)