多工並行處理多數需要用到多執行緒,第一次用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...