我正确设置了烧瓶架API。 一旦我点击了其余的API,我想运行一个python脚本/函数并返回一个runID,然后用户可以使用该runID来访问另一个Rest API以获取信息。
如何立即返回并使另一个Python脚本/函数在另一个线程/进程中运行?
以下是我的其余API
@app.route('/start/', methods=['POST'])
def start_run():
run_id = "SOME RANDOM NUMBER"
# I want to start python script here
return run_id
@app.rout('/get_report', methods=['GET'])
def get_report():
run_id = request.args("run_id")
return some_method(run_id)
答案 0 :(得分:0)
对于基于单例wsgi
的项目,运行长时间运行的后台任务是一个复杂的过程。最好的方法是使用某种背景调度程序,例如芹菜,七叶树。这个答案是基于芹菜的。
有一个很好的教程,介绍如何运行celery background task,您可以在项目中使用它。
请看下面的例子。
@celery.task()
def add_together(a, b):
return a + b
result = add_together.delay(23, 42) # Create celery instance for this job
print(result.request.id) # Print celery task id
默认情况下,芹菜提供状态,您也可以使用它。
task = result.AsyncResult(task_id)
print(task.state)