1. 程式人生 > >python 學習第二十二天(threading模組)

python 學習第二十二天(threading模組)

  • 啟動一個執行緒
import threading
import time

def he(num): #定義每個執行緒要執行的函式

    print("running on number:%s" %num)

    time.sleep(3)

if __name__ == '__main__':

    t1 = threading.Thread(target=he,args=(1,)) #生成一個執行緒例項
    t2 = threading.Thread(target=he,args=(2,)) #生成另一個執行緒例項

    t1.start() #啟動一個子執行緒,程式預設有個主執行緒,主執行緒必須要等所有子執行緒執行完了才能退出
t2.start() #啟動另一個子執行緒 print('ending----') print(t1.getName()) #獲取執行緒名 print(t2.getName())
  • join()和Daemon()方法
    join():在子執行緒完成執行之前,這個子執行緒的父執行緒將一直被阻塞。就是直到子程序執行完了才能執行join下面的程式碼
    setDaemon(True):

     將執行緒宣告為守護執行緒,必須在start() 方法呼叫之前設定, 如果不設定為守護執行緒程式會被無限掛起。這個方法基本和join是相反的。
     當我們 在程式執行中,執行一個主執行緒,如果主執行緒又建立一個子執行緒,主執行緒和子執行緒 就分兵兩路,分別執行,那麼當主執行緒完成
    
     想退出時,會檢驗子執行緒是否完成。如 果子執行緒未完成,則主執行緒會等待子執行緒完成後再退出。但是有時候我們需要的是 只要主執行緒完成了,不管子執行緒是否完成,都要和主執行緒一起退出,這時就可以 用setDaemon方法啦
    

import threading
from time import ctime,sleep
import time

def ListenMusic(name):

        print ("Begin listening to %s. %s" %(name,ctime()))
        sleep(3)
        print("end listening %s"%ctime())

def RecordBlog(title):

        print ("Begin recording the %s! %s" %(title,ctime()))
        sleep(5
) print('end recording %s'%ctime()) threads = [] t1 = threading.Thread(target=ListenMusic,args=('水手',)) t2 = threading.Thread(target=RecordBlog,args=('python執行緒',)) threads.append(t1) threads.append(t2) if __name__ == '__main__': for t in threads: #t.setDaemon(True) #注意:一定在start之前設定 t.start() # t.join() # t1.join() t1.setDaemon(True) #t2.join()########考慮這三種join位置下的結果? print ("all over %s" %ctime())
  • 其他方法
# run():  執行緒被cpu排程後自動執行執行緒物件的run方法
# start():啟動執行緒活動。
# isAlive(): 返回執行緒是否活動的。
# getName(): 返回執行緒名。
# setName(): 設定執行緒名。

threading模組提供的一些方法:#類方法
# threading.currentThread(): 返回當前的執行緒變數。
# threading.enumerate(): 返回一個包含正在執行的執行緒的list。正在執行指執行緒啟動後、結束前,不包括啟動前和終止後的執行緒。
# threading.activeCount(): 返回正在執行的執行緒數量,與len(threading.enumerate())有相同的結果。