使用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
相关产品推荐
相关产品推荐

