欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 多線程抓取圖片效率對比

 更新時(shí)間:2016年02月27日 09:27:05   投稿:hebedich  
Python由于有全鎖局的存在,并不能利用多核優(yōu)勢。所以,如果你的多線程進(jìn)程是CPU密集型的,那多線程并不能帶來效率上的提升,相反還可能會(huì)因?yàn)榫€程的頻繁切換,導(dǎo)致效率下降;如果是IO密集型,多線程進(jìn)程可以利用IO阻塞等待時(shí)的空閑時(shí)間執(zhí)行其他線程,提升效率。

目的:

是學(xué)習(xí)python 多線程的工作原理,及通過抓取400張圖片這種IO密集型應(yīng)用來查看多線程效率對比

import requests
import urlparse
import os
import time
import threading
import Queue

path = '/home/lidongwei/scrapy/owan_img_urls.txt'
#path = '/home/lidongwei/scrapy/cc.txt'
fetch_img_save_path = '/home/lidongwei/scrapy/owan_imgs/'

# 讀取保存再文件里面400個(gè)urls
with open(path) as f :
  urls = f.readlines()

urls = urls[:400]
# 使用Queue來線程通信,因?yàn)殛?duì)列是線程安全的(就是默認(rèn)這個(gè)隊(duì)列已經(jīng)有鎖)
q = Queue.Queue()
for url in urls:
  q.put(url)

start = time.time()

def fetch_img_func(q):
  while True:
    try:
      # 不阻塞的讀取隊(duì)列數(shù)據(jù)
      url = q.get_nowait()
      i = q.qsize()
    except Exception, e:
      print e
      break;
    print 'Current Thread Name Runing %s ... 11' % threading.currentThread().name
    url = url.strip()
    img_path = urlparse.urlparse(url).path
    ext = os.path.splitext(img_path)[1]
    print 'handle %s pic... pic url %s ' % (i, url)
    res = requests.get(url, stream=True)

    if res.status_code == 200:
      save_img_path = '%s%s%s' % (fetch_img_save_path, i, ext)
      # 保存下載的圖片
      with open(save_img_path, 'wb') as fs:
        for chunk in res.iter_content(1024):
          fs.write(chunk)
        print 'save %s pic ' % i

# 可以開多個(gè)線程測試不同效果
t1 = threading.Thread(target=fetch_img_func, args=(q, ), name="child_thread_1")
#t2 = threading.Thread(target=fetch_img_func, args=(q, ), name="child_thread_2")
#t3 = threading.Thread(target=fetch_img_func, args=(q, ), name="child_thread_3")
#t4 = threading.Thread(target=fetch_img_func, args=(q, ), name="child_thread_4")
t1.start()
#t2.start()
#t3.start()
#t4.start()
t1.join()
#t2.join()
#t3.join()
#t4.join()

end = time.time()
print 'Done %s ' % (end-start)

實(shí)驗(yàn)結(jié)果

400圖片

4線程 Done 12.443133831
3線程 Done 12.9201757908 
2線程 Done 32.8628299236
1線程 Done 54.6115460396 

總結(jié)

Python 自帶GIL 大鎖, 沒有真正意義上的多線程并行執(zhí)行。GIL 大鎖會(huì)在線程阻塞的時(shí)候釋放,此時(shí)等待的線程就可以激活工作,這樣如此類推,大大提高IO阻塞型應(yīng)用的效率。

相關(guān)文章

  • Windows下Anaconda安裝、換源與更新的方法

    Windows下Anaconda安裝、換源與更新的方法

    這篇文章主要介紹了Windows下Anaconda安裝、換源與更新的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python OpenCV學(xué)習(xí)之圖形繪制總結(jié)

    Python OpenCV學(xué)習(xí)之圖形繪制總結(jié)

    在圖像的任務(wù)中,不管是圖像檢測還是圖像識(shí)別,我們都需要通過繪制圖形和繪制文字對處理的結(jié)果進(jìn)行說明,本篇就詳細(xì)介紹下OpenCV中的圖形的繪制,感興趣的可以了解一下
    2022-01-01
  • python實(shí)現(xiàn)微信遠(yuǎn)程控制電腦

    python實(shí)現(xiàn)微信遠(yuǎn)程控制電腦

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)微信遠(yuǎn)程控制電腦的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 基于Python制作三款起床鬧鐘的示例代碼

    基于Python制作三款起床鬧鐘的示例代碼

    每天上班最痛苦的事情就是早起早起早起!這是大部分上班族的痛苦,但是不上班又是不可能的啦,因?yàn)槎际菫榱烁沐X。本文用Python制作了三款有趣的鬧鐘,感興趣的可以學(xué)習(xí)一下
    2022-05-05
  • 手寫一個(gè)python迭代器過程詳解

    手寫一個(gè)python迭代器過程詳解

    這篇文章主要介紹了手寫一個(gè)python迭代器過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 基于Python實(shí)現(xiàn)對Excel工作表中的數(shù)據(jù)進(jìn)行排序

    基于Python實(shí)現(xiàn)對Excel工作表中的數(shù)據(jù)進(jìn)行排序

    在Excel中,排序是整理數(shù)據(jù)的一種重要方式,它可以讓你更好地理解數(shù)據(jù),本文將介紹如何使用第三方庫Spire.XLS?for?Python通過Python來對Excel中的數(shù)據(jù)進(jìn)行排序,需要的可以參考下
    2024-03-03
  • TensorFlow索引與切片的實(shí)現(xiàn)方法

    TensorFlow索引與切片的實(shí)現(xiàn)方法

    這篇文章主要介紹了TensorFlow索引與切片的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Python實(shí)現(xiàn)五子棋人機(jī)對戰(zhàn)?和人人對戰(zhàn)

    Python實(shí)現(xiàn)五子棋人機(jī)對戰(zhàn)?和人人對戰(zhàn)

    這篇文章主要介紹了Python實(shí)現(xiàn)五子棋人機(jī)對戰(zhàn)?和人人對戰(zhàn),通過定義黑白子,落子位置以及獲勝規(guī)則展開詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • 用sleep間隔進(jìn)行python反爬蟲的實(shí)例講解

    用sleep間隔進(jìn)行python反爬蟲的實(shí)例講解

    在本篇文章里小編給大家整理了一篇關(guān)于用sleep間隔進(jìn)行python反爬蟲的實(shí)例講解內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2020-11-11
  • Python算法之圖的遍歷

    Python算法之圖的遍歷

    這篇文章主要介紹了Python算法之圖的遍歷,涉及遍歷算法BFS和DFS,以及尋找圖的(強(qiáng))連通分量的算法等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11

最新評論