python 學習第二十二天(threading模組)
阿新 • • 發佈:2018-11-01
- 啟動一個執行緒
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())有相同的結果。