当celery任务完成时,我怎样才能让它回调到flask ?



当将芹菜与Flask应用程序集成时,我有一个长期任务,需要在任务完成时回调到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

但是我不知道

一个芹菜任务是通过一个worker独立于Flask服务器运行的,它们是两个不同的进程,通过一个消息代理(rabbitmq?)进行通信。因此,当任务结束时,回调函数应该在考虑前者的情况下完成,这是两个不同的进程。

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

  • Webhook:在Flask服务器中定义一个HTTP URL,并在任务结束时用任务id做一个GET,这样Flask就知道了。
  • Database:使用线程安全的数据库并保持任务的状态。Flask永远不会知道任务结束,直到它查询数据库(即轮询),不是实时的,但仍然是一个选项。

相关内容

  • 没有找到相关文章

最新更新