【Python學習】下載faceScrub人臉數據庫 (多線程版本)

VicWiseman 8年前發布 | 24K 次閱讀 Python開發

來自: 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



 本文由用戶 VicWiseman 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!