欢迎各位兄弟 发布技术文章
这里的技术是共享的
当 for data in response.iter_content(chunk_size=1024): 不会卡住,但是 for data in response.iter_content(chunk_size=1024*1024): 时会卡住
在 requests
的 iter_content()
里,chunk_size 只是「一次读取的最大字节数」,并不是保证一次就能返回那么多。
如果 chunk_size=1024
(1KB):网络到达的数据很快就满足 1KB,立刻返回 → 循环频繁执行 → 感觉不卡。
如果 chunk_size=1024*1024
(1MB):必须等到缓冲区凑够 ~1MB 才返回(或者连接关闭) → 如果网络速度不快,就会「卡住」在那儿,看起来进度条没更新。
所以其实不是程序挂了,而是 下载循环在等数据填满 1MB。
要让进度条平滑更新,建议:
chunk_size 不要设太大
常见选择:64KB
(1024*64
) 或 256KB
(1024*256
)。
太小会 CPU 占用高,太大则进度条更新慢。
手动控制更新频率(避免太频繁刷新 UI)
比如 chunk_size=64KB,然后用时间判断「每 0.2 秒更新一次进度」。
👉 总结:
1MB 块会让下载过程「卡住」,因为得等到收到满 1MB 才能返回。
64KB 或 256KB 更合适,既不卡,又不会太频繁刷新。
要不要我帮你写一个「自适应」版本?比如:
如果文件很小(<10MB),用 64KB;
如果文件很大(>500MB),用 256KB;
这样进度条既流畅,又不浪费性能。