【Python学习】下载faceScrub人脸数据库 (多线程版本)
VicWiseman
9年前
来自: http://blog.csdn.net//chenriwei2/article/details/44925923
54在上一篇博文中,我用单线程版本的Python来实现下载脚本,其中最大的不足在于它是单线程的,很慢。
其实,下载网络图片是天然的具有并行性的,因为下载每一副图片都是独立的,甚至线程之间都不用交互。
-*- coding: utf-8 -*- """ Created on Tue Apr 07 20:19:38 2015 @author: Chenriwei """ import threading import time import urllib def download_and_save(url,savename): try: urlopen=urllib.URLopener() fp = urlopen.open(url) data = fp.read() fp.close() fid=open(savename,'w+b') fid.write(data) print "下载成功:"+ url fid.close() except IOError: print "下载失败:"+ url def get_all_iamge(filename): fid=open(filename) lines=fid.readlines() for line in lines: line_split=line.split('\t') name=line_split[0] image_id=line_split[1] face_id=line_split[2] box=line_split[4] image_url=line_split[3] if False == os.path.exists(name): os.mkdir(name) savefile=name+'/'+image_id+'.jpg' #最多1000个线程, while True: if(len(threading.enumerate()) < 1000): break t = threading.Thread(target=download_and_save,args=(image_url,savefile,)) t.start() if __name__ == "__main__": get_all_iamge('facescrub_actresses.txt')
用多线程去下载图片,明显就快很多了,看自己电脑的网速,一个小时一般就可以都下载完数据库。
下载好了的网盘地址:
链接:http://pan.baidu.com/s/1qWQpqEw 密码:tyym