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

异步Python下载zip压缩包并提取归档文件的相关问题咨询

问题修复与异步zip操作方案

现有代码错误原因

  • 你请求的是二进制zip资源,调用resp.json()是完全错误的:该方法仅用于解析JSON格式的响应体,解析非JSON内容会直接返回None,这就是你遇到类型错误的核心原因
  • 你把resp.json()的返回值赋值给了response变量,后续调用的response.content是不存在的属性,正确的响应对象是client.get返回的resp本身
  • 标准库zipfile的解压操作是同步逻辑,直接在协程中执行会阻塞事件循环,影响其他异步任务的运行

修复后可运行代码

import aiohttp
import zipfile
import io
import asyncio
from concurrent.futures import ThreadPoolExecutor

# 全局线程池,用于运行同步解压逻辑,避免阻塞事件循环
executor = ThreadPoolExecutor(max_workers=2)

async def unzip(zip_file_url):
    async with aiohttp.ClientSession() as client:
        async with client.get(zip_file_url) as resp:
            # 直接读取完整的二进制响应内容
            zip_bytes = await resp.read()
    
    # 同步解压逻辑封装,扔到线程池执行
    def sync_extract():
        with zipfile.ZipFile(io.BytesIO(zip_bytes)) as zf:
            zf.extractall("zip/")
    
    await asyncio.get_event_loop().run_in_executor(executor, sync_extract)

异步场景zip操作选型说明

  • 下载环节:直接使用aiohttp即可,不需要额外的特殊异步库
  • 解压环节:目前没有原生的高性能异步zip处理库,标准库zipfile的功能覆盖绝大多数场景,配合线程池运行解压逻辑即可完全适配异步架构,不会阻塞事件循环
  • 如果你需要处理GB级超大zip包,不想占用过多内存,可以用resp.content流式读取响应,边下载边喂给zipfile做流式解压

内容的提问来源于stack exchange,提问作者Артем Иодко

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 04:39:00