我的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发出请求时
Request received
并等待func1
执行,然后返回{"status": True}
但是现在我不想等待func1
完成其执行,而是将其发送{"status": True}
并func1
继续执行。
为了回复flask的请求,您需要完成修饰的功能(在您的情况下为main
)。
如果要并行执行某项,则需要在另一个线程或进程中执行。多进程应用程序用于实现多个CPU。(CPU绑定); 在您的情况下,只需要并行执行即可,因此最好使用线程。
一种简单的技术是使用ThreadPool。ThreadPoolExecutor
从current.futures导入,然后向其提交工作,这使您的函数执行代码得以继续。尝试这个:
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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句