如何在完成时将芹菜任务召唤回烧瓶

时间:2016-08-10 08:07:10

标签: python celery

当将芹菜与Flask应用程序集成时,我有一个需要在任务完成时回调到烧瓶的长期任务

@celery_app.task(bind=True)
def doSth(self):
    rv = long_time_job()
    return rv

@task_success.connect(sender=doSth)
def on_add_success(sender, result, **kwargs):
    #tell flask that a task has been done
    pass

但我不知道

1 个答案:

答案 0 :(得分:1)

芹菜任务是通过工作人员从Flask服务器独立运行的,它们是与消息代理(rabbitmq?)通信的两个不同进程。因此,当任务结束时,该回调函数应该考虑前者,两个不同的过程。

我在这里给你两个解决方案:

  • Webhook:在Flask服务器中定义一个HTTP URL,并在任务结束时使用任务ID执行GET,以便Flask知道。
  • 数据库:使用线程安全的数据库并保持任务的状态。 Flask永远不会知道任务在查询数据库(即轮询)之前结束,而不是实时但仍然是一个选项。