1. 程式人生 > >python程序,主執行緒, 子執行緒的關係

python程序,主執行緒, 子執行緒的關係

      程序是儲存資料的空間,而執行緒是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:主執行緒執行速度快於子執行緒。