从套接字读取和下载速度

0 投票
1 回答
2433 浏览
提问于 2025-04-15 14:54

我为了好玩,开发了一个下载管理器。我想知道,从网络上的一个连接中一次性读取大量数据(比如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兆位的连接、文件大小、选择的服务器,如果我使用分块读取和不使用分块读取,几乎没有什么区别。

撰写回答