使函数不等待其内部的其他函数

2024-01-03

我有一个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(使用前将#替换为@)

使函数不等待其内部的其他函数 的相关文章

随机推荐