python 如何停止一個死循環(huán)的線程
進程想要執(zhí)行任務(wù)就需要依賴線程。換句話說,就是進程中的最小執(zhí)行單位就是線程,并且一個進程中至少有一個線程。
那什么是多線程?提到多線程這里要說兩個概念,就是串行和并行,搞清楚這個,我們才能更好地理解多線程。
所謂串行,其實是相對于單條線程來執(zhí)行多個任務(wù)來說的,我們就拿下載文件來舉個例子:當(dāng)我們下載多個文件時,在串行中它是按照一定的順序去進行下載的,也就是說,必須等下載完A之后才能開始下載B,它們在時間上是不可能發(fā)生重疊的。
并行:下載多個文件,開啟多條線程,多個文件同時進行下載,這里是嚴格意義上的,在同一時刻發(fā)生的,并行在時間上是重疊的。
問題描述:
前幾天寫一個項目,然后項目中有一個死循環(huán)的線程,我需要讓他在我需要的時候直接停止該線程,但是使用基本方法join(),效果是無效的,因此我又去了百度方法,外加國外官方文檔,大概的結(jié)果就是為了保護進程,這種死循環(huán)使用原來方法是很難實現(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í)行要開啟的線程 # 釋放鎖,開啟下一個線程 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 # 釋放鎖,開啟下一個線程 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 # 釋放鎖,開啟下一個線程 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ā)時,直接停止該線程,但是由于線程守護的原因,我們沒辦法使得一個死循環(huán)突然停止,因此,我修改了原來的思路,我讓死循環(huán)函數(shù)在定義的時候去創(chuàng)建一個計時線程,這樣我的線程就是可控的,通過查找線程中的變量,獲得是否停止,這樣就可以控制我的線程執(zhí)行時間。
以上就是python 如何停止一個死循環(huán)的線程的詳細內(nèi)容,更多關(guān)于python 停止死循環(huán)的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. ThinkPHP5 通過ajax插入圖片并實時顯示(完整代碼)2. Python使用oslo.vmware管理ESXI虛擬機的示例參考3. 一篇文章帶你了解JavaScript-對象4. javascript設(shè)計模式 ? 建造者模式原理與應(yīng)用實例分析5. Java構(gòu)建JDBC應(yīng)用程序的實例操作6. IntelliJ IDEA設(shè)置條件斷點的方法步驟7. Express 框架中使用 EJS 模板引擎并結(jié)合 silly-datetime 庫進行日期格式化的實現(xiàn)方法8. Ajax引擎 ajax請求步驟詳細代碼9. python flask框架快速入門10. 解決Python paramiko 模塊遠程執(zhí)行ssh 命令 nohup 不生效的問題
