【Python学习】下载faceScrub人脸数据库 (多线程版本)

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



你可能感兴趣的:(【Python学习】下载faceScrub人脸数据库 (多线程版本))