當前位置:首頁 » 編程語言 » python線程時間

python線程時間

發布時間: 2025-02-07 01:04:26

python多線程編程之線程結束

線程管理包括線程創建、線程啟動、線程休眠、等待線程結束和線程停止。線程創建、線程啟動、線程休眠前文已提到過,這里不再贅述。

1 等待線程結束

等待線程結束使用的是join()方法,當前線程調用t1線程的join()方法時則阻塞當前進程,等待t1線程結束。如果t1線程結束或等待超時,則當前線程回到活動狀態繼續執行。join()方法語法如下:

join(timeout=None)

參數timeout是設置超時時間,單位是s。如果沒有設置timeout,則可以一直等待

當一個線程依賴於另一個線程的運行結果時,就可以調用另一個線程的join()方法等待它運行完成

example:

_value=0defthread_body():globalshared_valueprint('ThreadA開始......')for_inrange(5):print('ThreadA執行中......')shared_value+=1time.sleep(1)print('ThreadA結束......')defmain():print('主線程開始......')t1=threading.Thread(target=thread_body,name='ThreadA')t1.start()print('主線程被阻塞......')t1.join()print(f'value={shared_value}')print('主線程繼續執行......')

result:

主線程開始......ThreadA開始......主線程被阻塞......ThreadA執行中......ThreadA執行中......ThreadA執行中......ThreadA執行中......ThreadA執行中......ThreadA結束......value=5主線程繼續執行......

這里設置了一個共享變數shared_value,線程主體中對該變數進行了修改。在主函數裡面調用了t1的join()方法,就會導致主線程阻塞,等待線程t1執行結束,主線程才會繼續執行。從結果來看,主線程缺失被阻塞了,列印出來的shared_value的值已經由0變成5了

2 線程停止

對於有些復雜業務,需要設置一個線程停止變數來決定線程停止。例如,有一個抓取數據的系統,每隔半小時獲取執行一次數據抓取任務。數據抓取任務一般在子線程中進行,休眠一段時間再執行。這個子線程中國會有一個死循環。為了能停止子線程,應設置一個線程停止變數

example:

importthreadingimporttimeis_running=Truedefthread_body():whileis_running:print('ThreadA開始......')#數據抓取任務print('ThreadA執行中......')time.sleep(1)print('ThreadA結束......')print('整個程序執行完成')defmain():print('主線程開始......')t1=threading.Thread(target=thread_body)t1.start()command=input('請輸入停止指令:')ifcommand=='exit':globalis_runningis_running=Falseif__name__=='__main__':main()

result:

主線程開始......ThreadA開始......ThreadA執行中......請輸入停止指令:exitThreadA結束......整個程序執行完成

這里設置了一個線程停止變數is_running,默認值為True.當用戶通過鍵盤在控制台輸入exit時,其值變為False,然後程序終止。需要注意的是,控制台輸入exit後,還需要按enter鍵才可以。

Ⅱ python 多線程如何延時

importtime
fromthreadingimportThread

##定時輸入
classk(object):
x=0
sleepTime=0
def__init__(self,sleepTime=0):
self.sleepTime=sleepTime
self.input_delay_test()
definput_delay(self):
self.x=input("pleaseinput ")
definput_delay_test(self):
thd=Thread(target=self.input_delay)
thd.daemon=True
thd.start()
time.sleep(self.sleepTime)
print(self.x,self.sleepTime,sep='')
[print(x,end='')forxinrange(10)]

k(4)

熱點內容
安卓讀寫許可權在哪裡 發布:2025-02-07 03:29:21 瀏覽:36
釘郵怎麼找回密碼 發布:2025-02-07 03:16:40 瀏覽:81
比特幣錢包源碼 發布:2025-02-07 03:16:39 瀏覽:101
飢荒如何轉移伺服器 發布:2025-02-07 03:14:42 瀏覽:4
怎麼才能知道電視是不是安卓系統 發布:2025-02-07 03:04:23 瀏覽:817
銀行更改密碼紅色預警是什麼意思 發布:2025-02-07 02:54:22 瀏覽:552
androiddomain 發布:2025-02-07 02:46:04 瀏覽:844
埠掃描源碼 發布:2025-02-07 02:31:01 瀏覽:471
androidurl獲取圖片 發布:2025-02-07 02:22:11 瀏覽:483
調用上傳 發布:2025-02-07 02:19:53 瀏覽:86