Python-threading使用 一、多線程 二、實例

一、多線程

多線程類似於同時執行多個不同程序,多線程運行有如下優點:

· 使用線程可以把佔據長時間的程序中的任務放到後臺去處理。
· 用戶界面可以更加吸引人,比如用戶點擊了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度。
· 程序的運行速度可能加快。
· 在一些等待的任務實現上如用戶輸入、文件讀寫和網絡收發數據等,線程就比較有用了。在這種情況下我們可以釋放一些珍貴的資源如內存佔用等等。

Python3 通過標準庫 threading 提供對線程的支持。threading 模塊提供的方法:

threading.Thread(): 表示控制線程的類。該類可以以有限的方式安全地進行子類化。
threading.Timer(): 在指定的時間間隔過後執行函數的線程
threading.currentThread(): 返回當前的線程變量。
threading.enumerate(): 返回一個包含正在運行的線程的list。正在運行指線程啓動後、結束前,不包括啓動前和終止後的線程。
threading.activeCount(): 返回正在運行的線程數量,與len(threading.enumerate())有相同的結果。
threading.ThreadError(): 針對各種與線程相關的錯誤引發。請注意,許多接口使用RuntimeError而不是ThreadError。

線程模塊提供Thread類來處理線程,Thread類提供了以下方法:

threading.Thread(group=None, target =None, name=None, args =(), kwargs = {})
參數List:
    group應該None,在實現ThreadGroup類時保留用於將來的擴展。
    target是run()方法調用的可調用對象。默認爲None,意味着什麼都沒有被調用。
    name是線程名稱。默認情況下,唯一名稱由"Thread-N"形式構成,其中N是小十進制數。
    args是目標調用的參數元組。默認爲()。
    kwargs是目標調用的關鍵字參數字典。默認爲{}。
如果子類重寫構造函數,則必須確保在對線程執行任何其他操作之前調用基類構造函數(Thread .__ init __())。

run(): 用以表示線程活動的方法。
start():啓動線程活動。
join([time]): 等待至線程中止。這阻塞調用線程直至線程的join() 方法被調用中止-正常退出或者拋出未處理的異常-或者是可選的超時發生。
isAlive(): 返回線程是否活動的。
getName(): 返回線程名。
setName(): 設置線程名。

二、實例

import threading
import time

def next():
        print('在%s,正在看電影' % time.ctime())
        time.sleep(1.5)


def main():

    next_threads = []  # 用來存放執行next函數線程的列表

    for i in range(1,10):  # 創建1個線程用於next(),並添加到next_threads列表
        t = threading.Thread(target=next) # 執行的函數如果需要傳遞參數,threading.Thread(target=函數名,args=(參數,逗號隔開))
        next_threads.append(t)

    for i in next_threads:  # 啓動存放在next_threads列表中的線程
        i.start()

    for i in next_threads:  # 直至啓動的線程終止之前一直掛起;除非給出了 timeout(秒),否則會一直阻塞
        i.join()

if __name__ == '__main__':
    main()

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