Flask 之多线程并发模式

多线程模式设置 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

当启动多线程模式时,如果发现日志文件中的日志打印顺序并不完全是串行的话,请勿要多虑。

相关推荐
风象南7 小时前
很多人说,AI 让技术平权了,小白也能乱杀老师傅 ?
人工智能·后端
雨中飘荡的记忆9 小时前
ElasticJob分布式调度从入门到实战
java·后端
Se7en2589 小时前
推理平台全景
后端
大漠_w3cpluscom9 小时前
你学不会 CSS,不是笨,是方向错了
后端
花酒锄作田10 小时前
使用 pkgutil 实现动态插件系统
python
cipher12 小时前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
毅航13 小时前
自然语言处理发展史:从规则、统计到深度学习
人工智能·后端
JxWang0513 小时前
Task04:字符串
后端
前端付豪14 小时前
LangChain链 写一篇完美推文?用SequencialChain链接不同的组件
人工智能·python·langchain