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

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

相关推荐
有味道的男人8 小时前
电商效率翻倍:京东全量商品信息抓取
python
原来是猿9 小时前
博客系统自动化测试实战总结
python
我是一颗柠檬9 小时前
【MySQL全面教学】MySQL性能优化实战Day13(2026年)
数据库·后端·sql·mysql·性能优化·database
小江的记录本9 小时前
【JVM虚拟机】JVM调优:常用JVM参数、调优核心指标、OOM排查、GC日志分析、Arthas工具使用(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
大数据魔法师9 小时前
Streamlit(十三)- API 参考文档(六)- 媒体展示组件
python·web
爱写代码的倒霉蛋9 小时前
Hello-Agents的第一个练习-5分钟实现一个智能体(实现详解)
python
程序员cxuan9 小时前
我花了两天时间,终于把 Codex 额度掉太快的问题整明白了!!
人工智能·后端·程序员
IT_陈寒9 小时前
Vue这个动态响应坑把我整不会了
前端·人工智能·后端
金銀銅鐵9 小时前
[Java] 用图形化界面演示 iadd, isub, iconst_<i> 指令的效果
java·后端·python
AskHarries9 小时前
做国内还是出海
后端