Python之多線程學習【3】:GIL影響線程的效率

一. 解析

      其實很 簡單,假如我現在有三個線程,它要對一些數據進行處理,它的處理時間其實不一定比平常時候高很多。就是因爲GIL的存在。其實在每一個線程運算的過程中,其他的線程是無法運算的,是被鎖住的,只有線程1運算結束,進入IO了,其他的線程纔可以開始運算,所以開啓多線程做運算節約的其實是IO的時間。但是多線程如果用於聊天系統的發消息,收消息,就很方便。

二. 代碼

import threading
from queue import Queue
import copy
import time

def job(l, q):
    res = sum(l)
    q.put(res)

def multithreading(l):
    q = Queue()
    threads = []
    for i in range(4):
        t = threading.Thread(target=job, args=(copy.copy(l), q), name='T%i' % i)
        t.start()
        threads.append(t)
    [t.join() for t in threads]
    total = 0
    for _ in range(4):
        total += q.get()
    print(total)

def normal(l):
    total = sum(l)
    print(total)

if __name__ == '__main__':
    l = list(range(1000000))
    s_t = time.time()
    normal(l*4)
    print('normal: ',time.time()-s_t)
    s_t = time.time()
    multithreading(l)
    print('multithreading: ', time.time()-s_t)

三. 運行結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章