如何从Flask Rest API在后台运行长时间运行的python脚本?

时间:2018-11-26 06:16:11

标签: python flask subprocess python-multithreading

我正确设置了烧瓶架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)

1 个答案:

答案 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)