Aks*_*kar 5 python flask python-3.x
我有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)
Run Code Online (Sandbox Code Playgroud)
所以现在当我使用http://localhost:8080/first发出请求时
Request received并等待func1执行然后返回{"status": True}但是现在我不想等待func1完成它的执行,而是它会发送{"status": True}并func1继续它的执行。
为了回复来自烧瓶的请求,您需要完成装饰函数(在您的情况下,就是main)。
如果你想并行执行某件事,你需要在另一个线程或进程中执行它。多进程应用程序用于实现多个 CPU。(CPU 限制);在您的情况下,您只需要它并行执行,因此最好使用线程。
一个简单的技术是使用ThreadPool。ThreadPoolExecutor从并发.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)
Run Code Online (Sandbox Code Playgroud)
这将在不同的线程中运行func1,允许 Flask 响应用户而不会阻塞,直到func1完成。
| 归档时间: |
|
| 查看次数: |
319 次 |
| 最近记录: |