0

0

Python 文件流式传输的实现技巧

舞姬之光

舞姬之光

发布时间:2025-11-20 20:53:25

|

841人浏览过

|

来源于php中文网

原创

流式传输通过分块处理避免内存溢出,适用于大文件读写、网络下载及web服务。使用yield按块读取文件,结合requests.stream=true实现高效下载,flask中用生成器响应文件请求,临时处理推荐tempfile安全操作,核心是保持边读边处理,合理设置缓冲区大小以平衡性能与资源消耗。

python 文件流式传输的实现技巧

在处理大文件或网络传输时,流式传输能有效降低内存占用,提升程序稳定性。Python 提供了多种方式实现文件的流式读取和写入,关键在于避免一次性加载整个文件到内存中。

使用分块读取处理大文件

对大文件进行流式读取时,推荐按固定大小的块逐步读取,这样可以控制内存使用量。

示例如下:

def read_file_in_chunks(file_path, chunk_size=8192):
    with open(file_path, 'rb') as f:
        while True:
            chunk = f.read(chunk_size)
            if not chunk:
                break
            yield chunk

这个函数每次返回一个数据块,适合用于上传、哈希计算或转发场景。chunk_size 通常设为 4KB 到 64KB 之间,根据实际 I/O 性能调整。

立即学习Python免费学习笔记(深入)”;

结合 HTTP 实现文件流式下载

使用 requests 库可以从网络流式下载大文件,避免内存溢出。

操作方法:

import requests
<p>def download_file_stream(url, save_path):
with requests.get(url, stream=True) as r:
r.raise_for_status()
with open(save_path, 'wb') as f:
for chunk in r.iter_content(chunk_size=8192):
f.write(chunk)</p>

设置 stream=True 后,响应内容不会立即下载,而是通过 iter_content 按需获取数据块,适合处理视频、镜像等大文件下载。

华友协同办公自动化OA系统
华友协同办公自动化OA系统

华友协同办公管理系统(华友OA),基于微软最新的.net 2.0平台和SQL Server数据库,集成强大的Ajax技术,采用多层分布式架构,实现统一办公平台,功能强大、价格便宜,是适用于企事业单位的通用型网络协同办公系统。 系统秉承协同办公的思想,集成即时通讯、日记管理、通知管理、邮件管理、新闻、考勤管理、短信管理、个人文件柜、日程安排、工作计划、工作日清、通讯录、公文流转、论坛、在线调查、

下载

服务端实现文件流式响应(Flask 示例)

在 Web 服务中,可以通过生成器将本地文件分块返回给客户端,减少内存压力。

from flask import Flask, Response
import os
<p>app = Flask(<strong>name</strong>)</p><p>def generate_file(filename):
with open(filename, 'rb') as f:
while True:
chunk = f.read(8192)
if not chunk:
break
yield chunk</p><p>@app.route('/download')
def download():
file_path = 'large_file.zip'
return Response(
generate_file(file_path),
mimetype='application/octet-stream',
headers={'Content-Disposition': 'attachment; filename=large_file.zip'}
)</p>

Response 接收生成器后会逐步发送数据,适用于提供文件下载接口。

使用 tempfile 进行安全的中间流处理

若需对流数据做临时处理(如解压、转码),建议使用 tempfile 避免手动管理路径和权限问题。

示例:

import tempfile
import shutil
<p>def process_upload_stream(stream):
with tempfile.NamedTemporaryFile(delete=False) as tmpfile:
shutil.copyfileobj(stream, tmpfile, length=64*1024)
temp_path = tmpfile.name</p><pre class='brush:python;toolbar:false;'># 后续处理 temp_path 中的文件
return temp_path

copyfileobj 支持任意类文件对象之间的高效复制,length 参数控制内部缓冲区大小。

基本上就这些。关键是保持“边读边处理”的思路,避免 load all into memory 的模式。合理设置缓冲区大小,兼顾性能与资源消耗。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python Flask框架
Python Flask框架

本专题专注于 Python 轻量级 Web 框架 Flask 的学习与实战,内容涵盖路由与视图、模板渲染、表单处理、数据库集成、用户认证以及RESTful API 开发。通过博客系统、任务管理工具与微服务接口等项目实战,帮助学员掌握 Flask 在快速构建小型到中型 Web 应用中的核心技能。

99

2025.08.25

Python Flask Web框架与API开发
Python Flask Web框架与API开发

本专题系统介绍 Python Flask Web框架的基础与进阶应用,包括Flask路由、请求与响应、模板渲染、表单处理、安全性加固、数据库集成(SQLAlchemy)、以及使用Flask构建 RESTful API 服务。通过多个实战项目,帮助学习者掌握使用 Flask 开发高效、可扩展的 Web 应用与 API。

78

2025.12.15

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1770

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

569

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2338

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

43

2026.01.19

length函数用法
length函数用法

length函数用于返回指定字符串的字符数或字节数。可以用于计算字符串的长度,以便在查询和处理字符串数据时进行操作和判断。 需要注意的是length函数计算的是字符串的字符数,而不是字节数。对于多字节字符集,一个字符可能由多个字节组成。因此,length函数在计算字符串长度时会将多字节字符作为一个字符来计算。更多关于length函数的用法,大家可以阅读本专题下面的文章。

952

2023.09.19

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

483

2023.11.09

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

0

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号