在和弦回调返回之前执行的芹菜链任务

时间:2019-04-25 16:17:58

标签: python celery

芹菜:4.3.0 经纪人:RabbitMQ 后端:MongoDB

我有以下任务

i

芹菜应用程序使用节拍

@task(bind=True, name='find_something_a')
def find_something_a(self):

    data = find_data(a)
    return dumps(data)

@task(bind=True, name='find_something_b')
def find_something_a(self):

    data = find_data(b)
    return dumps(data)

@task(bind=True, name='find_something_c')
def find_something_a(self):

    data = find_data(c)
    return dumps(data)

@task(bind=True, name='write_something')
def write_something(self, data):

    data = loads(data)
    return = insert(data).getId()

@task(bind=True, name='read_analyse')
def read_analyse(self, id):

    data = find_data(id)
    result = analyse(data)
    return dumps(result)

@task(bind=True, name='chord_data')
def chord_data(self):

    callback = write_something.s()
    header = [find_something_a.s(),
              find_something_b.s(),
              find_something_c.s()]
    chord(header)(callback)


@task(bind=True, name='chain_tasks')
def chain_tasks(self):

    chain(chord_data.s() | read_analyse.s()).apply_async()

config

@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):

    sender.add_periodic_task(60, chain_tasks.s(), name='new every 60 seconds')
  • 我遇到的问题是执行了read_analyse任务,但没有从chorn回调中收到预期的ID。
  • 似乎在和弦完成之前就执行了。
  • 很奇怪,在第一个节拍中,链接的read_analyse任务失败,因为没有收到任何ID。从第二个节拍开始,它始终收到从第一个和弦回调返回的相同ID。

我不确定如何执行和弦是正确的。似乎和弦任务本身已完成,而链式任务已执行,但实际上在后台,分组任务和回调仍未完成。

我尝试使用prefork和eventlet,结果相同。还将预取添加到1。

谢谢

0 个答案:

没有答案