为了好玩,我开发了一个下载管理器,我想知道是否通过网络从套接字读取大量数据(即80或100KB)会使下载速度更快,而不是每个读取4KB循环迭代?
(例如,当我用firefox下载文件时,我的平均下载速度是200KBPS)
谢谢,Nir Tayeb。
答案 0 :(得分:2)
答案是否。
您的网络传输速率(200kbps)表示缓冲4k或8k或200k几乎没有什么区别。读取之间花费的时间太短。无论如何,瓶颈似乎都是你的转移率。
让我们试试stackoverflow 30.9MB mp3 podcast:
注意 :这是一个不可靠的黑客,其结果会受到很多影响 因素 - 对示范有用 <仅限目的)
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兆位连接,文件大小,服务器选择,如果我使用chunked阅读,它没有多大区别。