从套接字读取和下载速度
我为了好玩,开发了一个下载管理器。我想知道,从网络上的一个连接中一次性读取大量数据(比如80KB或100KB),是否会让下载速度更快,而不是每次循环只读取4KB的数据?
(比如我用火狐浏览器下载文件时,平均下载速度是200KB每秒)
谢谢,Nir Tayeb。
1 个回答
2
答案是不。
你的网络传输速度(200kbps)说明,无论是缓冲4k、8k还是200k,几乎都不会有太大区别。因为在读取之间花费的时间太短了。看起来,瓶颈还是在于你的传输速度。
我们来试试一个大小为30.9MB的mp3播客:
注意: 这是一种不太可靠的技巧,结果可能会受到很多因素的影响 - 仅供演示用途
import urllib2
import time
def report(start, size, text):
total = time.time() - start
print "%s reading took %d seconds, transfer rate %.2f KBPS" % (
text, total, (size / 1024.0) / total)
start = time.time()
url = ('http://itc.conversationsnetwork.org/audio/download/'
'ITC.SO-Episode69-2009.09.29.mp3')
f = urllib2.urlopen(url)
start = time.time()
data = f.read() # read all data in a single, blocking operation
report(start, len(data), 'All data')
f.close()
f = urllib2.urlopen(url)
start = time.time()
while True:
chunk = f.read(4096) # read a chunk
if not chunk:
break
report(start, len(data), 'Chunked')
f.close()
在我的系统中的结果:
All data reading took 137 seconds, transfer rate 230.46 KBPS
Chunked reading took 137 seconds, transfer rate 230.49 KBPS
所以在我的系统里,2兆位的连接、文件大小、选择的服务器,如果我使用分块读取和不使用分块读取,几乎没有什么区别。