【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