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

Python httpx如何实现异步流式数据处理?现有同步示例如何改造?

改造思路正误判断

你的整体思路方向是成立的,但存在两处核心错误:

  • 没有使用httpx异步客户端:异步场景下不能直接调用顶层的httpx.stream方法,必须通过httpx.AsyncClient实例发起异步流式请求
  • 异步生成器遍历方式错误:异步场景下r.iter_bytes()返回的是异步生成器,不能用普通for加await的方式遍历,需要使用async for语法遍历

正确异步流式处理实现

首先要确保你安装的httpx支持异步功能,如果没装对应依赖可以执行pip install httpx[async]安装。

完整示例代码如下:

import asyncio
import httpx

# 示例回调函数:保存文件块
async def save_chunk_callback(chunk: bytes, file_handler):
    file_handler.write(chunk)

async def async_stream_download(url: str, save_path: str):
    # 初始化异步客户端
    async with httpx.AsyncClient() as client:
        # 发起异步流式GET请求
        async with client.stream("GET", url) as response:
            # 打开待写入文件,大文件场景可替换为aiofiles的异步IO实现
            with open(save_path, "wb") as f:
                # 异步遍历字节块,chunk_size可自定义块大小,默认1024字节
                async for chunk in response.iter_bytes(chunk_size=1024*1024):
                    # 调用异步回调处理块
                    await save_chunk_callback(chunk, f)

if __name__ == "__main__":
    download_url = "https://download.freebsd.org/ftp/releases/amd64/amd64/ISO-IMAGES/12.0/FreeBSD-12.0-RELEASE-amd64-mini-memstick.img"
    save_file_path = "FreeBSD-12.0-RELEASE-amd64-mini-memstick.img"
    asyncio.run(async_stream_download(download_url, save_file_path))

补充说明

如果需要完全异步化避免IO阻塞,可以引入aiofiles库做异步文件写入,替换示例中的同步open逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:24:03