Python 当芹菜任务完成后,我如何将其调回烧瓶
将芹菜与Flask应用程序集成时,我有一个长期任务,任务完成后需要回调FlaskPython 当芹菜任务完成后,我如何将其调回烧瓶,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
@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将永远不会知道任务结束,直到它查询数据库(即轮询),不是实时的,但仍然是一个选项李>