Python 当芹菜任务完成后,我如何将其调回烧瓶

Python 当芹菜任务完成后,我如何将其调回烧瓶,python,celery,Python,Celery,将芹菜与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

将芹菜与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

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

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

  • Webhook:在Flask服务器中定义一个HTTP URL,并在任务结束时使用任务id执行GET,以便Flask知道
  • 数据库:使用线程安全的数据库,并将任务的状态保存在那里。Flask将永远不会知道任务结束,直到它查询数据库(即轮询),不是实时的,但仍然是一个选项
webhook可能是最好的尝试