python程序,主執行緒, 子執行緒的關係
阿新 • • 發佈:2019-01-30
程序是儲存資料的空間,而執行緒是cpu執行的指令。就好比程序是一個房間,執行緒就是房間中的每一個人。所以每一個程序都必定包含至少一個執行緒。程序和執行緒是相對獨立的,但又是相互依賴的。當主執行緒執行完畢後,子執行緒隨即停止。
話不多說,直接上程式碼!!!
import threading, time def run(n): print('task start', n) time.sleep(2) print('task end', n, threading.current_thread()) start_time = time.time() t_obj = [] # 存執行緒例項 for i in range(50): t = threading.Thread(target=run, args=('t-%s' %i, )) t.setDaemon(True) # 把當前程序設定為守護程序,主執行緒執行完畢,子執行緒均停止 t.start() t_obj.append(t) # 設定join,主執行緒等待所有子執行緒執行完畢才退出 # for t in t_obj: # t.join() time.sleep(2) print('-'*30 + 'all threads has finished...', threading.current_thread(), threading.active_count()) print('cost time', time.time() - start_time)
1.使用join函式之後,主執行緒等待所有子執行緒執行完畢後退出。
task start t-0 task start t-1 task start t-2 task start t-3 task start t-4 task start t-5 task start t-6 task start t-7 task start t-8 task start t-9 task end t-1 <Thread(Thread-2, started 10672)> task end t-0 <Thread(Thread-1, started 10764)> task end t-2 <Thread(Thread-3, started 12156)> task end t-4 <Thread(Thread-5, started 8688)> task end t-3 <Thread(Thread-4, started 7556)> task end t-5 <Thread(Thread-6, started 11604)> task end t-6 <Thread(Thread-7, started 11552)> task end t-9 <Thread(Thread-10, started 12024)> task end t-7 <Thread(Thread-8, started 11324)> task end t-8 <Thread(Thread-9, started 1844)> ------------------------------all threads has finished... <_MainThread(MainThread, started 9996)> 1 cost time 4.005229234695435
可以看到,當子執行緒全部執行完畢以後,主執行緒才結束。
2.使用setDaemon函式之後,子執行緒設定為守護執行緒,一旦主執行緒執行完畢,子執行緒隨即停止。
task start t-0 task start t-1 task start t-2 task start t-3 task start t-4 task start t-5 task start t-6 task start t-7 task start t-8 task start t-9 ------------------------------all threads has finished... <_MainThread(MainThread, started 10500)> 11 cost time 0.006000518798828125
可以看到,當主執行緒結束時,子執行緒隨之停止。
tips:主執行緒執行速度快於子執行緒。