python-3.x 如何使用Flask进行多重处理

j5fpnvbx  于 2022-12-01  发布在  Python
关注(0)|答案(1)|浏览(151)

具体来说,我使用Flask来处理一个请求,伪代码如下:

from flask import Flask, request

app = Flask(__name__)
@app.route("/foo", methods=["POST"])
def foo():
    data = request.get_json()  # {"request_id": "abc", "data": "some text"}
    result_a = do_task_a(data)  # returns {"result_a": "a"}, maybe about 1 second to finish 
    result_b = do_task_b(data)  # returns {"result_b": "b"}, maybe about 1 second to finish
    result_c = do_task_c(data)  # returns {"result_c": "c"}, maybe about 1 second to finish
    result = {
        "result_a": result_a["result_a"],
        "result_b": result_b["result_b"],
        "result_c": result_c["result_c"]}
    return result

app.run(host='0.0.0.0', port=4000, threaded=False)

这里,do_task_ado_task_bdo_task_c是完全独立的子任务,我知道我可以使用multiprocessing.Process创建进程来完成这三个子任务,并使用join()等待子任务完成,但我不知道为每个请求创建Process是正确的方法吗?
也许我可以用multiprocessing.Queue来帮忙,但是我找不到一个好的方法。
我寻找多处理,但找不到一个好的解决方案。

nhjlsmyf

nhjlsmyf1#

我不是一个python的家伙,但确实创建进程是sn昂贵的操作,如果可能的话-创建线程,他们比进程便宜。
如果您多次运行请求-您甚至可以做得更好,因为为每个请求创建线程的开销仍然相当大
更高级的设置是创建一个“预加载”线程池。就像N个线程,你总是在内存中准备运行到达的任务。
在技术解决方案方面,我找到了This article,它解释了如何在python 3.2+中创建线程池

相关问题