色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python 如何停止一個(gè)死循環(huán)的線程

瀏覽:121日期:2022-07-04 14:40:21

進(jìn)程想要執(zhí)行任務(wù)就需要依賴線程。換句話說,就是進(jìn)程中的最小執(zhí)行單位就是線程,并且一個(gè)進(jìn)程中至少有一個(gè)線程。

那什么是多線程?提到多線程這里要說兩個(gè)概念,就是串行和并行,搞清楚這個(gè),我們才能更好地理解多線程。

所謂串行,其實(shí)是相對(duì)于單條線程來執(zhí)行多個(gè)任務(wù)來說的,我們就拿下載文件來舉個(gè)例子:當(dāng)我們下載多個(gè)文件時(shí),在串行中它是按照一定的順序去進(jìn)行下載的,也就是說,必須等下載完A之后才能開始下載B,它們?cè)跁r(shí)間上是不可能發(fā)生重疊的。

python 如何停止一個(gè)死循環(huán)的線程

并行:下載多個(gè)文件,開啟多條線程,多個(gè)文件同時(shí)進(jìn)行下載,這里是嚴(yán)格意義上的,在同一時(shí)刻發(fā)生的,并行在時(shí)間上是重疊的。

python 如何停止一個(gè)死循環(huán)的線程

問題描述:

前幾天寫一個(gè)項(xiàng)目,然后項(xiàng)目中有一個(gè)死循環(huán)的線程,我需要讓他在我需要的時(shí)候直接停止該線程,但是使用基本方法join(),效果是無效的,因此我又去了百度方法,外加國(guó)外官方文檔,大概的結(jié)果就是為了保護(hù)進(jìn)程,這種死循環(huán)使用原來方法是很難實(shí)現(xiàn)的,

整體解決方案:

創(chuàng)建線程函數(shù)

class myThread(threading.Thread): def __init__(self, threadID, name, counter): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.counter = counter def run(self): print('開啟線程: ' + self.name) # 獲取鎖,用于線程同步 threadLock.acquire() # 執(zhí)行要開啟的線程 # 釋放鎖,開啟下一個(gè)線程 threadLock.release()

死循環(huán)函數(shù)

def Dead_circle(): while True: print('死循環(huán)')

增加結(jié)束的條件

def run_go(): num = 0 while True: time.sleep(1) num += 1 if num == 10: return False # 假設(shè)我執(zhí)行10s后結(jié)束

增加新方法

def run_go(): num = 0 while True: time.sleep(1) num += 1 if num == 10: return False

修改執(zhí)行方法

def Dead_circle(): thread1 = myThread(1, 'Thread-1', 1) thread1.start() while thread1.counter: time.sleep(1) print('死循環(huán)') thread1.join()

修改線程類

class myThread(threading.Thread): def __init__(self, threadID, name, counter): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.counter = counter self.State = True def run(self): print('開啟線程: ' + self.name) # 獲取鎖,用于線程同步 threadLock.acquire() # 執(zhí)行要開啟的線程 if not run_go(): self.counter = False # 釋放鎖,開啟下一個(gè)線程 threadLock.release()

整體代碼

import threadingimport timefrom tkinter import *threadLock = threading.Lock()class myThread(threading.Thread): def __init__(self, threadID, name, counter): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.counter = counter self.State = True def run(self): print('開啟線程: ' + self.name) # 獲取鎖,用于線程同步 threadLock.acquire() # 執(zhí)行要開啟的線程 if not run_go(): self.counter = False # 釋放鎖,開啟下一個(gè)線程 threadLock.release()def run_go(): num = 0 while True: time.sleep(1) num += 1 if num == 10: return Falsedef Dead_circle(): thread1 = myThread(1, 'Thread-1', 1) thread1.start() while thread1.counter: time.sleep(1) print('死循環(huán)') thread1.join()if __name__ == ’__main__’: Dead_circle()

整體思路

原來的思路是執(zhí)行線程,然后規(guī)定條件,當(dāng)條件觸發(fā)時(shí),直接停止該線程,但是由于線程守護(hù)的原因,我們沒辦法使得一個(gè)死循環(huán)突然停止,因此,我修改了原來的思路,我讓死循環(huán)函數(shù)在定義的時(shí)候去創(chuàng)建一個(gè)計(jì)時(shí)線程,這樣我的線程就是可控的,通過查找線程中的變量,獲得是否停止,這樣就可以控制我的線程執(zhí)行時(shí)間。

以上就是python 如何停止一個(gè)死循環(huán)的線程的詳細(xì)內(nèi)容,更多關(guān)于python 停止死循環(huán)的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 国产精品午夜免费观看网站 | 中国一级淫片aaa毛片毛片 | 激情丝袜美女视频二区 | 久久久国产99久久国产首页 | 欧美一级人与动毛片免费播放 | 日本s色大片在线观看 | aaa毛片手机在线现看 | 日韩精品视频美在线精品视频 | 九九精品视频在线观看九九 | 特黄特色大片免费播放路01 | 怡红院日本一道日本久久 | 国产在线成人一区二区 | 三级毛片在线播放 | 欧美一级特黄乱妇高清视频 | 91精品免费久久久久久久久 | 亚洲系列在线 | 亚洲 中文 欧美 日韩 在线人 | 亚洲毛片视频 | 久久亚洲精品中文字幕亚瑟 | 国产成人精品三级 | 在线第一页 | 成年人免费观看视频网站 | 毛片a片免费观看 | 午夜爱爱毛片xxxx视频免费看 | 欧美jizzhd精品欧美另类 | japanesevideo乱子 japanese日本tube色系 | 一级爱爱片一级毛片-一毛 一级爱做片免费观看久久 一级白嫩美女毛片免费 | 手机看片国产在线 | 午夜三级a三点 | 特级毛片全部免费播放器 | 欧美另类videosbestsex久久 | 毛片视频网址 | 九九视频在线观看视频6 | 国产精品自在线天天看片 | 久久六视频 | 色偷偷资源网 | 欧美人成在线观看ccc36 | 99精品免费 | 日韩在线成人 | 韩国免费播放一级毛片 | 农村寡妇女人一级毛片 |