我有一个flask
服务如下:
from flask import Flask, request
import json
import time
app = Flask(__name__)
@app.route("/first", methods=["POST"])
def main():
print("Request received")
func1()
return json.dumps({"status": True})
def func1():
time.sleep(100)
print("Print function executed")
if __name__ == "__main__":
app.run("0.0.0.0", 8080)
所以现在当我使用发出请求时http://localhost:8080/first http://localhost:8080/first
- 控制转到 main 方法并打印
Request received
并等待func1
被执行然后返回{"status": True}
但现在我不想等待func1
完成其执行,而不是发送{"status": True}
and func1
将继续执行。
为了回复来自烧瓶的请求,您需要完成装饰函数(在您的情况下,这是main
).
如果你想并行执行某件事,你需要在另一个线程或进程中执行它。多进程应用程序用于实现多个 CPU。 (CPU 限制);在您的情况下,您只需要它并行执行,因此最好使用线程。
一个简单的技术是使用ThreadPool。进口ThreadPoolExecutor
from 并发期货 https://docs.python.org/3/library/concurrent.futures.html, then submit继续工作,这允许您的函数执行代码继续。尝试这个:
from flask import Flask, request
import json
import time
import os
from concurrent.futures import ThreadPoolExecutor
app = Flask(__name__)
# Task manager executor
_threadpool_cpus = int(os.cpu_count() / 2)
EXECUTOR = ThreadPoolExecutor(max_workers=max(_threadpool_cpus, 2))
@app.route("/first", methods=["POST"])
def main():
print("Request received")
EXECUTOR.submit(func1)
return json.dumps({"status": True})
def func1():
time.sleep(2)
print("Print function executed")
if __name__ == "__main__":
app.run("0.0.0.0", 8080)
这将运行func1
在不同的线程中,允许 Flask 响应用户而不会阻塞,直到func1
已经完成了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)