Python多線程:主線程等待所有子線程結(jié)束代碼
我就廢話不多說了,還是直接看代碼吧!
from time import ctime
import threading
import time
def a():
#for i in range(5):
print('Program a is running... at ', ctime(),u'.線程名為:',threading.current_thread().name )
time.sleep(0.2)
def b(x):
#for i in range(5):
print('Program b('+x+') is running... at ', ctime(),u'.線程名為:',threading.current_thread().name )
time.sleep(0.1)
if __name__ == '__main__':
print('Mainthread %s is running...' % threading.current_thread().name)
thread_list = []
for i in range(400):#同時運行多個
t1= threading.Thread(target=a)
thread_list.append(t1)
t2 = threading.Thread(target=b, args=('Python',))
thread_list.append(t2)
t3 = threading.Thread(target=b, args=('Java',))
thread_list.append(t3)
for t in thread_list:
t.setDaemon(True) # 設置為守護線程,不會因主線程結(jié)束而中斷
t.start()
for t in thread_list:
t.join() # 子線程全部加入,主線程等所有子線程運行完畢
print('Mainthread %s ended.' % threading.current_thread().name)
補充知識:Python主線程結(jié)束為什么守護線程還在運行?
在實際的交互模式中,主線程只有在Python退出時才終止,所以action函數(shù)輸出結(jié)果還是被打印出來了?!?/p>
按照我的理解應該是說,在shell里主線程在輸出結(jié)果之后并沒有真的結(jié)束,所以action還會打印結(jié)果。
建議把程序編譯出來,放到另外的環(huán)境中測試,估計就會是你要的結(jié)果了。
以上這篇Python多線程:主線程等待所有子線程結(jié)束代碼就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
python的mysql數(shù)據(jù)庫建立表與插入數(shù)據(jù)操作示例
這篇文章主要介紹了python的mysql數(shù)據(jù)庫建立表與插入數(shù)據(jù)操作,結(jié)合實例形式分析了python操作mysql數(shù)據(jù)庫建立表與插入數(shù)據(jù)相關實現(xiàn)技巧,需要的朋友可以參考下2019-09-09
Python??序列化反序列化和異常處理的問題小結(jié)
這篇文章主要介紹了Python?序列化反序列化和異常處理,本文結(jié)合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12
Starship定制shell提示符實現(xiàn)信息自由
這篇文章主要介紹了Starship定制shell提示符的實現(xiàn),讓你需要的所有信息觸手可及,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-03-03

