You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python tarfile处理大.tar.xz流文件时的卡顿问题求助

解决大.tar.xz文件流式下载并解压的问题

你的代码卡顿核心原因是response.content会把整个大文件全部加载到内存,哪怕开了stream=True也没用——content属性本质就是把流式响应一次性读入内存,大文件必然导致内存过载、卡顿甚至崩溃。

直接用响应的原始流就能实现边下载边解压,完全不需要先把数据存到BytesIO里,具体修改如下:

import requests
import tarfile

session = requests.Session()
# 保持stream=True开启流式下载
response = session.get(url, stream=True)
# 禁用requests自动解压(避免服务器返回的压缩包被提前解压,保证拿到原始的.tar.xz字节流)
response.raw.decode_content = True

# 直接将响应流传给tarfile,用r|*模式实现流式解压
with tarfile.open(mode='r|*', fileobj=response.raw, bufsize=16384) as tar:
    tar.extractall(path='/path/')

关键说明:

  • response.raw是requests提供的原始字节流对象,支持按块读取,完全符合tarfile对fileobj的要求。
  • r|*是tarfile的流式读取模式,不需要提前加载整个压缩文件到内存,会边读边解压,内存占用极低。
  • 用with语句管理tarfile,能自动处理资源释放,避免异常时的文件泄漏。

内容的提问来源于stack exchange,提问作者Spiff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 10:25:17