ctrl c退出python多執行緒程式

2021-09-01 12:18:22 字數 1129 閱讀 9322

多工並行處理多數需要用到多執行緒,第一次用python寫乙個任務,需要同時監控兩個狀態,就使用了下多執行緒,但測試時候ctrl+c居然退不出,我以為是bug,結果看了下確實是這樣的。如果乙個python程式用了多執行緒,當子執行緒沒有結束時,用ctrl+c是關閉不了主線程的,這時候就只能用kill命令殺掉,這樣會很麻煩。

像我這樣新上手的肯定需要多測試,怎麼能忍每次去kill

所以找了別人嘗試的方法

#encoding=utf-8

import threading

from time import sleep

def func():

sleep(100)

p=threading.thread(target=func)

p.setdaemon(true)

p.start()

while 1:

if not p.isalive():

break

sleep(1)

print 'done'

多執行緒時候:

threads = 

t1 = threading.thread(target=auto_compile,args=('./my_path',))

t2 = threading.thread(target=wait_analyze,args=('/home/mypath/',))

def threads_join(threads):

'''令主線程阻塞,等待子執行緒執行完才繼續,使用這個方法比使用join的好處是,可以ctrl+c kill掉程序

'''for t in threads:

while 1:

if t.isalive():

sleep(10)

else:

break

if __name__ == "__main__":

for t in threads:

t.setdaemon(true)

t.start()

threads_join(threads)

測試時候還總是遇到解析錯誤,空格和tab鍵搞的,神煩,設定vim顯示空格和tab,仔細排查,不對的就多打個空格,還不對就刪除點空格。。。暈

Python 捕捉Ctrl C退出指令碼程式

當我們的指令碼程式進入死迴圈或者卡在某個耗時操作,需要退出程式時,一般都是使用ctrl c來殺死程序,那麼,如何在程式裡進行這個操作呢?實際上,在命令列輸入ctrl c的原理是觸發了 sigint 訊號,所以我們需要捕捉這個訊號。使用signal模組開捕捉訊號,並使用sys的exit方法退出程式。處...

golang捕獲ctrl c退出程式

在golang當中如何捕獲ctrl c命令,讓程式有序的的退出?首先測試一段golang 捕獲sigint和sigkill c make chan os.signal,1 signal.notify c,os.interrupt,os.kill s c fmt.println got signal ...

python捕捉執行緒錯誤 python 多執行緒錯誤

我想用多執行緒查詢資料庫,然後進行資料操作。list range 19999,100000 pool threadpool 10 results pool.map main,list pool.close pool.join def main i print i query id,link,keyw...