亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Python 多線程抓取圖片效率實(shí)驗(yàn)

fevin / 1285人閱讀

摘要:大鎖會(huì)在線程阻塞的時(shí)候釋放,此時(shí)等待的線程就可以激活工作,這樣如此類推,大大提高阻塞型應(yīng)用的效率。

Python 多線程抓取圖片效率實(shí)驗(yàn) 實(shí)驗(yàn)?zāi)康?

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

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來(lái)線程通信,因?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

# 可以開(kāi)多個(gè)線程測(cè)試不同效果
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 大鎖, 沒(méi)有真正意義上的多線程并行執(zhí)行。GIL 大鎖會(huì)在線程阻塞的時(shí)候釋放,此時(shí)等待的線程就可以激活工作,這樣如此類推,大大提高IO阻塞型應(yīng)用的效率。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/37768.html

相關(guān)文章

  • 通過(guò)網(wǎng)絡(luò)圖片小爬蟲(chóng)對(duì)比Python中單線程線(進(jìn))程的效率

    摘要:批評(píng)的人通常都會(huì)說(shuō)的多線程編程太困難了,眾所周知的全局解釋器鎖,或稱使得多個(gè)線程的代碼無(wú)法同時(shí)運(yùn)行。多線程起步首先讓我們來(lái)創(chuàng)建一個(gè)名為的模塊。多進(jìn)程可能比多線程更易使用,但需要消耗更大的內(nèi)存。 批評(píng) Python 的人通常都會(huì)說(shuō) Python 的多線程編程太困難了,眾所周知的全局解釋器鎖(Global Interpreter Lock,或稱 GIL)使得多個(gè)線程的 Python 代碼無(wú)...

    W4n9Hu1 評(píng)論0 收藏0
  • Python爬蟲(chóng)學(xué)習(xí)路線

    摘要:以下這些項(xiàng)目,你拿來(lái)學(xué)習(xí)學(xué)習(xí)練練手。當(dāng)你每個(gè)步驟都能做到很優(yōu)秀的時(shí)候,你應(yīng)該考慮如何組合這四個(gè)步驟,使你的爬蟲(chóng)達(dá)到效率最高,也就是所謂的爬蟲(chóng)策略問(wèn)題,爬蟲(chóng)策略學(xué)習(xí)不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲(chóng)的設(shè)計(jì)方案,比如說(shuō)。 (一)如何學(xué)習(xí)Python 學(xué)習(xí)Python大致可以分為以下幾個(gè)階段: 1.剛上手的時(shí)候肯定是先過(guò)一遍Python最基本的知識(shí),比如說(shuō):變量、數(shù)據(jù)結(jié)構(gòu)、語(yǔ)法...

    liaoyg8023 評(píng)論0 收藏0
  • 使用 Python 進(jìn)行并發(fā)編程系列 - 收藏集 - 掘金

    摘要:使用進(jìn)行并發(fā)編程篇三掘金這是使用進(jìn)行并發(fā)編程系列的最后一篇。所以我考慮啟用一個(gè)本地使用進(jìn)行并發(fā)編程篇二掘金我們今天繼續(xù)深入學(xué)習(xí)。 使用 Python 進(jìn)行并發(fā)編程 - asyncio 篇 (三) - 掘金 這是「使用Python進(jìn)行并發(fā)編程」系列的最后一篇。我特意地把它安排在了16年最后一天。 重新實(shí)驗(yàn)上篇的效率對(duì)比的實(shí)現(xiàn) 在第一篇我們?cè)?jīng)對(duì)比并發(fā)執(zhí)行的效率,但是請(qǐng)求的是httpb...

    MorePainMoreGain 評(píng)論0 收藏0
  • Python入門網(wǎng)絡(luò)爬蟲(chóng)之精華版

    摘要:學(xué)習(xí)網(wǎng)絡(luò)爬蟲(chóng)主要分個(gè)大的版塊抓取,分析,存儲(chǔ)另外,比較常用的爬蟲(chóng)框架,這里最后也詳細(xì)介紹一下。網(wǎng)絡(luò)爬蟲(chóng)要做的,簡(jiǎn)單來(lái)說(shuō),就是實(shí)現(xiàn)瀏覽器的功能。 Python學(xué)習(xí)網(wǎng)絡(luò)爬蟲(chóng)主要分3個(gè)大的版塊:抓取,分析,存儲(chǔ) 另外,比較常用的爬蟲(chóng)框架Scrapy,這里最后也詳細(xì)介紹一下。 首先列舉一下本人總結(jié)的相關(guān)文章,這些覆蓋了入門網(wǎng)絡(luò)爬蟲(chóng)需要的基本概念和技巧:寧哥的小站-網(wǎng)絡(luò)爬蟲(chóng),當(dāng)我們?cè)跒g覽器中輸入...

    Bmob 評(píng)論0 收藏0
  • 爬蟲(chóng) - 收藏集 - 掘金

    摘要:使用的爬蟲(chóng)知乎用戶數(shù)據(jù)爬取和分析閱讀掘金背景說(shuō)明小拽利用的寫的爬蟲(chóng),實(shí)驗(yàn)性的爬取了知乎用戶的基本信息同時(shí),針對(duì)爬取的數(shù)據(jù),進(jìn)行了簡(jiǎn)單的分析呈現(xiàn)。 Python 知乎爬蟲(chóng)(最新) - 后端 - 掘金 環(huán)境:python3.x外部依賴包:requestsgithub項(xiàng)目地址 主要的問(wèn)題:模擬登陸: 知乎現(xiàn)在改用https請(qǐng)求了,數(shù)據(jù)加密,但是問(wèn)題不大,重要的是網(wǎng)頁(yè)數(shù)據(jù)改動(dòng)了,而且在請(qǐng)求時(shí)后...

    zzbo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<