1. 程式人生 > >提高效率之python的多執行緒

提高效率之python的多執行緒

python本身的設計對多執行緒的執行有所限制。為了資料安全設計有GIL全域性直譯器鎖。在python中,一個執行緒的執行包括獲取GIL、執行程式碼直到掛起和釋放GIL。每次釋放GIL鎖,執行緒之間都會進行競爭,由拿到鎖的執行緒進入cpu執行,所以由於GIL鎖的存在,python裡的一個程序永遠只能同時執行一個執行緒。

python的多執行緒 python的多執行緒實際上只是在執行的時候看起來像是併發的。

· 使用threading模組
import threading
import datetime
import time
 
def dosomething(num):
    print('the number is',num)
    time.sleep(1)
 
 
if __name__ == '__main__':
    starttime = datetime.datetime.now()
    list = [1,2,3,4,5,6,7,8,9,10]
    for i in list:
        dosomething(i)
    endtime = datetime.datetime.now()
    print('time used',endtime-starttime)

在不使用threading的模組下,由單執行緒執行上述程式碼用時10秒,每次sleep的過程都是在等待,效率低。

使用threading模組,在某個執行緒等待的時間執行其他執行緒,效率提升。(不足1秒的原因是,沒有加join,主執行緒先於其他執行緒執行完畢)

import threading
import datetime
import time
 
 
def dosomething(num):
    print('the number is', num)
    time.sleep(1)
 
 
if __name__ == '__main__':
    starttime = datetime.datetime.now()
    list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    for i in list:
        threading.Thread(target=dosomething, args=(i,)).start()
    endtime = datetime.datetime.now()
    print('time used', endtime - starttime)

因此執行緒試用的場合之一就是非計算密集的場合,與其等待某個阻斷作業的完成,不如趁著等待時間來執行其他執行緒。