python多線程(一)

線程創建

Thread 類 創建線程的方法

1.直接傳要運行的方法

2.繼承thread類,重寫run方法

 

構造方法

class threading.Thread(group=Nonetarget=Nonename=Noneargs=()kwargs={}*daemon=None)

group :線程組 暫未實現,將來擴展 ,必須爲None

target:要執行的方法, 由run() 方法回調

name:線程名字

args/kwargs: 需要傳入的方法參數

daemon:守護進程設置

實例方法

start():啓動線程,一個線程對象只能調用一個,在一個單獨的控制線程中,被對象的   

             run()方法調用, 若同一個線程對象被多次調用回raise 一個RuntimeError

run():   表示一個線程活動,可以在子類中覆蓋該方法

 

join(timeout=None) :阻塞當前上下文環境的線程,直到當前線程終止,或timeout                              

                                    超時

ps:由於join()始終返回None,因此必須在join()之後調用is_alive(),如果線程是活動狀態,那麼就是因爲超時返回的

is_alive(): 判斷線程是否活動狀態

name 獲取/設置線程名

get/setName(name):

    Old getter/setter API for name; use it directly as a property instead

 

daemon:一個布爾值,指示此線程是否爲守護程序線程(True)或不是(False)。 必須在調用start()之前設置它,否則引發RuntimeError。

 

isDaemon()

setDaemon()

Old getter/setter API for daemon; use it directly as a property instead.

 

daemon 測試:

沒有設置 daemon的情況:

設置了daemon 情況

總結:如果設置setdaemon(True),主線程在執行,後臺線程也在執行,若主線程已經結束,那麼後臺進程也立即結束,不管是執行完成

join 測試

join 測試

 

執行結果(注意主線程結束的位置,調用後,是子線程全部執行完成,再繼續執行主線程,join 可以配置timeout的)

 

不帶join 的情況

 

執行結果情況:

 

總結:

主線程A中,創建了子線程B,並且在主線程A中調用了B.join(),那麼,主線程A會在調用的地方等待,直到子線程B完成操作後,再往下執行,

 

join daemon 區別

daemon:

主線程A中,創建了子線程B,並且在主線程A中調用了B.setDaemon(),這個的意思是,把主線程A設置爲守護線程,這時候,要是主線程A執行結束了,就不管子線程B是否完成,一併和主線程A退出.這就是setDaemon方法的含義,這基本和join是相反的。

特別注意的:必須在start() 方法調用之前設置,如果不設置爲守護線程,程序會被無限掛起,只有等待了所有線程結束它才結束。

多線程變單線程執行的例子

 

 

線程創建

thread_create.py

join 測試

thread_join_test

daemon測試

thread_daemon_test.py

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