標籤:stc class log min 實現 繼承 9.png 父類 lock
前言
冬天到了,小夥伴們最喜歡和好朋友一起吃火鍋了,那麼這種多個人同時吃火鍋的情境如何用python實現呢?
執行函數
1.先寫一個執行函數,用來實現做某件事情,不同的人吃火鍋用一個參數people代替。
# coding=utf-8import threadingimport timedef chiHuoGuo(people): print("%s 吃火鍋的小夥伴-羊肉:%s" % (time.ctime(),people)) time.sleep(1) print("%s 吃火鍋的小夥伴-魚丸:%s" % (time.ctime(),people))
重寫threading.Thread
1.使用Threading模組建立線程,直接從threading.Thread繼承,然後重寫__init__方法和run方法
# coding=utf-8import threadingimport timeclass myThread (threading.Thread): # 繼承父類threading.Thread def __init__(self, people, name): ‘‘‘重寫threading.Thread初始化內容‘‘‘ threading.Thread.__init__(self) self.threadName = name self.people = people def run(self): # 把要執行的代碼寫到run函數裡面 線程在建立後會直接運行run函數 ‘‘‘重寫run方法‘‘‘ print("開始線程: " + self.threadName) chiHuoGuo(self.people) # 執行任務 print("qq交流群:226296743") print("結束線程: " + self.name)
start和run區別
1.start()方法 開始線程活動。
對每一個線程對象來說它只能被調用一次,它安排對象在一個另外的單獨線程中調用run()方法(而非當前所處線程)。
當該方法在同一個線程對象中被調用超過一次時,會引入RuntimeError(執行階段錯誤)。
2.run()方法 代表了線程活動的方法。
你可以在子類中重寫此方法。標準run()方法調用了傳遞給對象的建構函式的可調對象作為目標參數,如果有這樣的參數的話,順序和關鍵字參數分別從args和kargs取得
參考代碼
# coding=utf-8import threadingimport timedef chiHuoGuo(people): print("%s 吃火鍋的小夥伴-羊肉:%s" % (time.ctime(),people)) time.sleep(1) print("%s 吃火鍋的小夥伴-魚丸:%s" % (time.ctime(),people))class myThread (threading.Thread): # 繼承父類threading.Thread def __init__(self, people, name): ‘‘‘重寫threading.Thread初始化內容‘‘‘ threading.Thread.__init__(self) self.threadName = name self.people = people def run(self): # 把要執行的代碼寫到run函數裡面 線程在建立後會直接運行run函數 ‘‘‘重寫run方法‘‘‘ print("開始線程: " + self.threadName) chiHuoGuo(self.people) # 執行任務 print("qq交流群:226296743") print("結束線程: " + self.name)# 建立新線程thread1 = myThread("xiaoming", "Thread-1")thread2 = myThread("xiaowang", "Thread-2")# 開啟線程thread1.start()thread2.start()time.sleep(0.5)print("退出主線程")
運行結果:
開始線程: Thread-1Wed Jan 17 16:33:44 2018 吃火鍋的小夥伴-羊肉:xiaoming開始線程: Thread-2Wed Jan 17 16:33:44 2018 吃火鍋的小夥伴-羊肉:xiaowang退出主線程Wed Jan 17 16:33:45 2018 吃火鍋的小夥伴-魚丸:xiaomingWed Jan 17 16:33:45 2018 吃火鍋的小夥伴-魚丸:xiaowang結束線程: Thread-1結束線程: Thread-2
備忘:這裡運行結果會有個問題,主線程已經退出了,子線程Thread-1和Thread-2還在跑。這就是後面需要講的守護線程了。。。
python筆記8-多線程threading之封裝式