新聞中心

站在用戶的角度思考問題,與客戶深入溝通,找到武都網站設計與武都網站推廣的解決方案,憑借多年的經驗,讓設計與互聯(lián)網技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網站設計、成都網站建設、企業(yè)官網、英文網站、手機端網站、網站推廣、申請域名、雅安服務器托管、企業(yè)郵箱。業(yè)務覆蓋武都地區(qū)。
thread子類的封裝
通過使用threading模塊能完成多任務的程序開發(fā),為了讓每個線程的封裝性更完美,所以使用threading模塊時,往往會定義一個新的子類class,只要繼承threading.Thread就可以了,然后重寫run方法。
#coding=utf-8 import threading import time class MyThread1(threading.Thread): def run(self): for i in range(3): time.sleep(1) msg = "I'm "+self.name+' @ '+str(i) #name屬性中保存的是當前線程的名字 print(msg) class MyThread2(threading.Thread): def run(self): for i in range(3): time.sleep(1) msg = "I'm "+self.name+' @ '+str(i) #name屬性中保存的是當前線程的名字 print(msg) if __name__ == '__main__': t1 = MyThread1() t2 = MyThread2() t1.start() t2.start()
運行結果為:
說明:
python的threading.Thread類有一個run方法,用于定義線程的功能函數,可以在自己的線程類中覆蓋該方法。
創(chuàng)建自己的線程實例后,通過Thread類的start方法,可以啟動該線程,當該線程獲得執(zhí)行的機會時,就會調用run方法執(zhí)行線程。
相關推薦:《Python視頻教程》
2. 線程的執(zhí)行順序
#coding=utf-8 import threading import time class MyThread(threading.Thread): def run(self): for i in range(3): time.sleep(1) msg = "I'm "+self.name+' @ '+str(i) #name屬性中保存的是當前線程的名字 print(msg) def test(): for i in range(1,5): t=MyThread() t.start() if __name__ == '__main__': test()
運行結果為:
說明:
從代碼和執(zhí)行結果我們可以看出,多線程程序的執(zhí)行順序是不確定的。當執(zhí)行到sleep語句時,線程將被阻塞(Blocked),到sleep結束后,線程進入就緒(Runnable)狀態(tài),等待調度。而線程調度將自行選擇一個線程執(zhí)行。上面的代碼中只能保證每個線程都運行完整個run函數,但是線程的啟動順序、run函數中每次循環(huán)的執(zhí)行順序都不能確定。
總結:
每個線程一定會有一個名字,盡管上面的例子中沒有指定線程對象的name,但是python會自動為線程指定一個名字。
當線程的run()方法結束時該線程完成。
無法控制線程調度程序,但可以通過別的方式來影響線程調度的方式。
線程的幾種狀態(tài)
本文名稱:創(chuàng)新互聯(lián)Python教程:Python中Thread子類如何封裝
當前網址:http://www.5511xx.com/article/dhhpicd.html


咨詢
建站咨詢
