【发布时间】:2018-02-10 10:46:29
【问题描述】:
我希望进行快速流式下载 -> 上传以通过 HTTP 将大文件从一台服务器移动到另一台服务器。
在此期间,我注意到 urllib3 使用的 httplib 并因此也请求,似乎将它一次从流中获取多少字节硬编码为 8192 字节
这是为什么? 8192比其他尺寸有什么好处?
【问题讨论】:
-
最初提交于github.com/python/cpython/commit/…。通过
git blame找到。 -
@AshishNitinPatil 啊,谢谢。现在我怀疑 8192 来自补丁 #1065257:bugs.python.org/issue1065257 和 bugs.python.org/file6362/httplib2.patch。但是,我不认为 cmets 解决了 8192?
-
8k 是块设备的常见块大小,因此读取此块大小或多个块大小的数据块会更有效。这也是一个常见的 http 标头大小限制(例如在 apache 中),因此您可以在单个块中传输标头。你有什么理由不应该是 8k 吗?
-
@wim 我使用 64k 进行了测试,使用迭代器作为源流,在这种情况下传输 5gb 更快。
-
似乎可以在 3.7 中进行配置,原因与您的用例类似。查看 3 个月前合并的 PR4279