我试图将文件的缓冲区下载到5个线程中,但它似乎变得乱七八糟。在
from numpy import arange
import requests
from threading import Thread
import urllib2
url = 'http://pymotw.com/2/urllib/index.html'
sizeInBytes = r = requests.head(url, headers={'Accept-Encoding': 'identity'}).headers['content-length']
splitBy = 5
splits = arange(splitBy + 1) * (float(sizeInBytes)/splitBy)
dataLst = []
def bufferSplit(url, idx, splits):
req = urllib2.Request(url, headers={'Range': 'bytes=%d-%d' % (splits[idx], splits[idx+1])})
print {'bytes=%d-%d' % (splits[idx], splits[idx+1])}
dataLst.append(urllib2.urlopen(req).read())
for idx in range(splitBy):
dlth = Thread(target=bufferSplit, args=(url, idx, splits))
dlth.start()
print dataLst
with open('page.html', 'w') as fh:
fh.write(''.join(dataLst))
更新: 所以我反复工作,只取得了一些进展,但是如果我下载了一个jpg,它似乎被破坏了
^{pr2}$下面是如何下载后的图片。在
下面是我如何让它工作如果任何人有任何建议,可能的改进,你是非常欢迎的。在
这是我开始工作的第一个基本代码,我发现如果我将
bufTh
缓冲线程设置为Daemon False,则进程需要更多的时间来完成。在这是这个项目的另一个版本。差异:
线程代码是一个单一的小函数
每个线程下载一个块,然后将其存储在全局线程安全字典中
线程被启动,然后
join()
它们同时运行所有操作完成后,数据按正确的顺序重新组合,然后写入磁盘
额外打印,以验证所有内容是否正确
计算输出文件大小,以便进行额外比较
来源
输出
^{pr2}$相关问题 更多 >
编程相关推荐