新聞中心

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


咨詢
建站咨詢
