我正在使用这段代码来下载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)以执行微优化和学习知识。 🙂
由于没有最有效的最佳方法,因此您应该始终以任何调整为基准,以检查您的更改是否真正有益。玩得开心!