新聞中心
python多線程編程退出的方法是在啟動(dòng)線程之前設(shè)置【daemon】這個(gè)屬性為“True”。即當(dāng)父進(jìn)程結(jié)束時(shí),所有的子進(jìn)程跟著全部結(jié)束。
成都創(chuàng)新互聯(lián)從2013年開(kāi)始,先為老城等服務(wù)建站,老城等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為老城企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
首先補(bǔ)充一個(gè)知識(shí)點(diǎn)
daemon:一個(gè)布爾值,指示此線程是否為守護(hù)線程(真)(假)。必須在start()調(diào)用之前設(shè)置此參數(shù),否則RuntimeError引發(fā)該參數(shù)。它的初始值是從創(chuàng)建線程繼承的;主線程不是守護(hù)程序線程,因此在主線程中創(chuàng)建的所有線程默認(rèn)為 daemon= False。當(dāng)沒(méi)有活動(dòng)的非守護(hù)線程時(shí),整個(gè)Python程序?qū)⑼顺?。只要在啟?dòng)線程之前設(shè)置了這個(gè)屬性為True,當(dāng)父進(jìn)程結(jié)束時(shí),所有的子進(jìn)程跟著全部結(jié)束.
接下來(lái)我們一起看看代碼部分舉例:
import threading,time,random
class Sea:
def __init__(self):
self.__sea = 0
def m(self,i):
# 隨機(jī)時(shí)間進(jìn)行打印
time.sleep(random.random()*2)
print(i)
if i == 1:
self.__sea = 1
def main(self):
Threads = []
# 將會(huì)啟動(dòng)10個(gè)線程,線程id為 1 時(shí)全部線程終止!
for i in range(10):
t = threading.Thread(target=self.m,args=(i,))
t.daemon = 1
Threads.append(t)
# 啟動(dòng)所有線程
for i in Threads:
i.start()
# 當(dāng)標(biāo)志位【 sea 】時(shí)所有多線程結(jié)束
while 1:
if self.__sea:
break
print('線程已退出!')
Sea().main()
# 繼續(xù)執(zhí)行后續(xù)程序
for i in range(5):
print('yeah!')此時(shí),main這個(gè)函數(shù)對(duì)于多線程來(lái)講,便是父進(jìn)程,也就是守護(hù)進(jìn)程。預(yù)計(jì)會(huì)進(jìn)行10次循環(huán)的數(shù)字打印,但是當(dāng)self.__sea這個(gè)標(biāo)志位為真時(shí),所有的剩余子線程將不會(huì)再執(zhí)行,直接結(jié)束進(jìn)行后續(xù)的操作。
結(jié)果如下:
推薦課程:python語(yǔ)言設(shè)計(jì)(嵩天教授)
網(wǎng)頁(yè)標(biāo)題:創(chuàng)新互聯(lián)Python教程:python多線程編程怎么退出
文章分享:http://www.dlmjj.cn/article/dhidisp.html


咨詢
建站咨詢

