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

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

相关推荐
DLYSB_4 小时前
存储运维实战:基于 Ceph Event 监听与 Python 适配器的分布式存储健康度物理声光响应架构
运维·ceph·python·报警灯
陈随易4 小时前
FFmpeg 9.0 发布,代号 Lei,音视频处理再升级
前端·后端·程序员
阿童木写作4 小时前
跨境图片翻译工具多合一,批量图片视频字幕翻译加智能抠图
人工智能·python·音视频·语音识别
阿童木写作6 小时前
Python实现Temu图片批量翻译自动化教程
运维·人工智能·python·自动化
就是一只白7 小时前
复制地理信息python版本
python
凌虚7 小时前
面向 MySQL 用户的 PostgreSQL 快速上手指南
数据库·后端·架构
看浪的路人7 小时前
第1讲:Agent 到底是什么?和 Chatbot 有什么区别
python·ai
瓦学妹8 小时前
什么是网络索引?它是如何工作的?
大数据·网络·python·网络爬虫
IT_陈寒8 小时前
Vite静态资源引用这个坑我踩得有点疼
前端·人工智能·后端
天天爱吃肉82188 小时前
商用车多体动力学实战笔记|第6篇:动力传动系统(发动机、变速箱、分动器、TCS、LSD限滑差速)
大数据·人工智能·笔记·python·嵌入式硬件·汽车