具体来说,我使用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_a
、do_task_b
、do_task_c
是完全独立的子任务,我知道我可以使用multiprocessing.Process
创建进程来完成这三个子任务,并使用join()
等待子任务完成,但我不知道为每个请求创建Process
是正确的方法吗?
也许我可以用multiprocessing.Queue
来帮忙,但是我找不到一个好的方法。
我寻找多处理,但找不到一个好的解决方案。
1条答案
按热度按时间nhjlsmyf1#
我不是一个python的家伙,但确实创建进程是sn昂贵的操作,如果可能的话-创建线程,他们比进程便宜。
如果您多次运行请求-您甚至可以做得更好,因为为每个请求创建线程的开销仍然相当大
更高级的设置是创建一个“预加载”线程池。就像N个线程,你总是在内存中准备运行到达的任务。
在技术解决方案方面,我找到了This article,它解释了如何在python 3.2+中创建线程池