什么是urllib2.urlopen读取的最佳块大小? - python

我正在使用这段代码来下载mp3播客。

req = urllib2.urlopen(item)
CHUNK = 16 * 1024
with open(local_file, 'wb') as fp:
    while True:
        chunk = req.read(CHUNK)
        if not chunk: break
        fp.write(chunk)

哪一种效果很好-但是我想知道最佳下载性能的最佳块大小是多少?

如果有什么不同,我使用6兆位的adl连接。

python大神给出的解决方案

一个好的缓冲区大小将与您的OS内核用于套接字缓冲区的大小相同。这样,您执行的读取不会超出应有的数量。

在GNU / Linux上,套接字缓冲区的大小可以在/proc/sys/net/core/rmem_default文件中看到(大小以字节为单位)。
您可以使用setsockopt设置SO_RCVBUF参数来增加套接字的缓冲区大小。但是,此大小受系统(/proc/sys/net/core/rmem_max)的限制,并且您需要管理权限(CAP_NET_ADMIN)才能超过该限制。

在这一点上,您可以做一些特定于平台的操作,以获取少量收益。

但是,最好查看套接字的选项(请参见man 7 socket,online version)以执行微优化和学习知识。 🙂

由于没有最有效的最佳方法,因此您应该始终以任何调整为基准,以检查您的更改是否真正有益。玩得开心!