1. 程式人生 > >python執行緒:threading

python執行緒:threading

執行緒的概念:簡單理解就是作業系統對cup資源的分配排程

下面用例項來講一下threading的用法:

我們假設你想聽歌、看電影來度過愉快的週末,以前的作業系統都是單個處理任務,但是現在cpu,你可以同時做很多種事情。

直接上程式碼,程式碼上看註釋

import threading
from time import ctime, sleep

# 聽歌、看電影可以在一個播放器下進行,我們要傳入檔案、播放時間
def super_player(file, time):

    # 這個迴圈可以設定每個檔案的播放次數
    for i in range(2):

        # 打印出播放的是什麼檔案、時長、當前時間
        print("This play %s. time: %s accrount_time: %s" % (file, time, ctime()))
        sleep(time)



if __name__ == '__main__':
    
    # 用一個字典來放你想要操作的任務
    play_dict = {
        '往後餘生.mp3': 3,
        '肖申克的救贖.mp4': 5,
        '這個殺手不太冷.mp4': 4,
    }
    
    # 弄一個執行緒列表放所開的執行緒
    threads = []

    # 來個迴圈開多個執行緒執行你要操作的任務
    for file, time in play_dict.items():
        
        # 為所需要的任務,開一個執行緒,target指定執行操作的函式,args為函式傳參
        t = threading.Thread(target=super_player, args=(file, time))

        # 將執行緒新增到執行緒列表
        threads.append(t)
    
    # 一個迴圈開起執行緒列表中的所有執行緒
    for t_out in threads:

        # 將執行緒設定為守護執行緒,當主執行緒執行完畢,子執行緒也跟著銷燬(也可不設)
        t_out.setDaemon(True)

        # 開啟執行緒
        t_out.start()
    
    # 阻礙主執行緒,直到子執行緒執行完畢
    t_out.join()

    print("end thread %s" % ctime())

執行結果:

This play 往後餘生.mp3. time: 3 accrount_time: Fri Nov  2 18:22:10 2018
This play 肖申克的救贖.mp4. time: 5 accrount_time: Fri Nov  2 18:22:10 2018
This play 這個殺手不太冷.mp4. time: 4 accrount_time: Fri Nov  2 18:22:10 2018
This play 往後餘生.mp3. time: 3 accrount_time: Fri Nov  2 18:22:13 2018
This play 這個殺手不太冷.mp4. time: 4 accrount_time: Fri Nov  2 18:22:14 2018
This play 肖申克的救贖.mp4. time: 5 accrount_time: Fri Nov  2 18:22:15 2018
end thread Fri Nov  2 18:22:18 2018

可以看到三個任務的執行緒同時在18:22:10 2018開啟,第一個執行3秒結束,第二個執行4秒結束,第三個執行5秒結束。

主執行緒在執行8秒後結束。如果是單個執行緒執行的話,至少主執行緒結束所用時間是:3+4+5=12秒。可以看出多個執行緒執行可以大大提高執行任務的效率。而且你可以將第一個任務和第二個任務的時間同樣改為5秒,主執行緒結束的時間為10秒,同樣也沒有超過12秒,然鵝單個執行緒就蛋疼了。