溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python3爬蟲使用多線程運(yùn)算是不是會(huì)比較快

發(fā)布時(shí)間:2020-11-25 09:56:35 來源:億速云 閱讀:160 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹了python3爬蟲使用多線程運(yùn)算是不是會(huì)比較快,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

多線程存在GIL(global interpret lock)。為了實(shí)現(xiàn)多線程功能,程序把線程鎖住,然后鎖住了之后,只有唯一一個(gè)線程運(yùn)算。Python只能夠讓線程在同一時(shí)間運(yùn)算一個(gè)東西。在不停切換,看起來是多線程的。但實(shí)際上不是。

import threading
from queue import Queue
import copy
import time
 
def job(lists, q):
    res = sum(lists)
    q.put(res)
    
def multi_theading(lists):
    q = Queue()
    threads = []
    for i in range(4):
        t = threading.Thread(target=job, args=(copy.copy(lists), q),
                             name = 'T%i'%i)
        t.start()
        threads.append(t)
    [t.join() for i in threads]
    total = 0
    for _ in range(4):
        total += q.get()
    print(total)
 
def normal(lists):
    # 完全不用多線程
    total = sum(lists)
    print(total)
 
if __name__ == '__main__':
    lists = list(range(1000000))
    s_t = time.time()
    normal(lists*4)
    print('Normal : ', time.time() - s_t)
    s_t = time.time()
    multi_theading(lists)
print('multi_threading : ', time.time() - s_t)

 

運(yùn)行結(jié)果

1999998000000
Normal :  0.1705458164215088
1999998000000
multi_threading :  0.14860320091247559

不用多線程是 0.1705秒;用了多線程僅僅是稍微快了一點(diǎn)。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享python3爬蟲使用多線程運(yùn)算是不是會(huì)比較快內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細(xì)的解決方法等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI