多线程模式设置 threaded=True 即可,适合于 I/O 密集型应用,使得可以充分提升 CPU 的利用率。
单线程模式
python
import time
from flask import Flask
app = Flask(__name__)
@app.route('/long-task', methods=['GET'])
def long_task():
time.sleep(5) # 模拟长时间操作
return {"result": "Done"}
app.run(threaded=False, port=5000)
多线程模式
python
import time
from flask import Flask
app = Flask(__name__)
@app.route('/long-task', methods=['GET'])
def long_task():
time.sleep(5) # 模拟长时间操作
return {"result": "Done"}
app.run(threaded=True, port=5000)
并发请求对比
为了模拟并发请求,我们使用多线程同时发起多个请求,然后看程序执行完毕时整体请求花费的时间。
python
import datetime
import threading
import requests
def run():
url = r"http://127.0.0.1:5000/long-task"
response = requests.request('get', url)
print(response.json())
if __name__ == '__main__':
start_time = datetime.datetime.now()
print('start_time:', start_time)
thread_list = []
for i in range(5):
t = threading.Thread(target=run)
thread_list.append(t)
for t in thread_list:
t.daemon = True
t.start()
for t in thread_list:
t.join()
end_time = datetime.datetime.now()
print('end_time:', end_time)
print('一共用时:', end_time - start_time)
单线程模式下,即使同时发起多个请求,服务端仍然是一次只处理一个请求,其他请求需要等待。
python
start_time: 2026-01-04 16:02:31.589845
{'result': 'Done'}
{'result': 'Done'}
{'result': 'Done'}
{'result': 'Done'}
{'result': 'Done'}
end_time: 2026-01-04 16:02:56.646640
一共用时: 0:00:25.056795
多线程模式下,服务器会为每个新请求创建一个新线程**,**可以同时并发处理多个请求。
python
start_time: 2026-01-04 16:09:33.286395
{'result': 'Done'}
{'result': 'Done'}
{'result': 'Done'}
{'result': 'Done'}
{'result': 'Done'}
end_time: 2026-01-04 16:09:38.303070
一共用时: 0:00:05.016675
当启动多线程模式时,如果发现日志文件中的日志打印顺序并不完全是串行的话,请勿要多虑。