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

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

相关推荐
老百姓懂点AI16 小时前
[RAG实战] 向量数据库选型与优化:智能体来了(西南总部)AI agent指挥官的长短期记忆架构设计
python
喵手18 小时前
Python爬虫零基础入门【第九章:实战项目教学·第15节】搜索页采集:关键词队列 + 结果去重 + 反爬友好策略!
爬虫·python·爬虫实战·python爬虫工程化实战·零基础python爬虫教学·搜索页采集·关键词队列
Suchadar19 小时前
if判断语句——Python
开发语言·python
ʚB҉L҉A҉C҉K҉.҉基҉德҉^҉大19 小时前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
喵手19 小时前
Python爬虫零基础入门【第九章:实战项目教学·第14节】表格型页面采集:多列、多行、跨页(通用表格解析)!
爬虫·python·python爬虫实战·python爬虫工程化实战·python爬虫零基础入门·表格型页面采集·通用表格解析
毕设源码-钟学长19 小时前
【开题答辩全过程】以 基于SpringBoot的智能书城推荐系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
0思必得019 小时前
[Web自动化] 爬虫之API请求
前端·爬虫·python·selenium·自动化
莫问前路漫漫20 小时前
WinMerge v2.16.41 中文绿色版深度解析:文件对比与合并的全能工具
java·开发语言·python·jdk·ai编程
木头左20 小时前
Backtrader框架下的指数期权备兑策略资金管理实现与风险控制
python
玄同76520 小时前
LangChain 核心组件全解析:构建大模型应用的 “乐高积木”
人工智能·python·语言模型·langchain·llm·nlp·知识图谱