本文實例為大家分享了python多線程下信號處理程序示例的具體代碼,供大家參考,具體內容如下
下面是一個網上轉載的實現思路,經過驗證,發現是可行的,就記錄下來。
思路
python多線程中要響應Ctrl+C的信號以殺死整個進程,需要:
1.把所有子線程設為Daemon;
2.使用isAlive()函數判斷所有子線程是否完成,而不是在主線程中用join()函數等待完成;
3.寫一個響應Ctrl+C信號的函數,修改全局變量,使得各子線程能夠檢測到,并正常退出。
源碼
#!/usr/bin/env python #encoding: utf-8 #filename: signal_demo.py import threading, signal def do_job(i, step): global exited idx = i while not exited: if(idx < 10000000): print 'thread[%d]: idx=%d' % (i, idx) idx = idx + step else: break if exited: print 'receive a signal to exit, thread[%d] stop.' % i else: print 'thread[%d] complete.' % i def sig_handler(sig, frame): global exited exited = True print 'receive a signal %d, exited=%d' % (sig, exited) def main(): #set signal handler signal.signal(signal.SIGTERM, sig_handler) signal.signal(signal.SIGINT, sig_handler) pool = [] pool_size = 50 for i in range(pool_size): t = threading.Thread(target = do_job, args = (i, pool_size)) t.setDaemon(True) pool.append(t) t.start() while 1: alive = False for i in range(pool_size): alive = alive or pool[i].isAlive() if alive == True: break if not alive: break if __name__ == '__main__': exited = False main()
命令行運行
python signal_demo.py
截圖
參考文獻
Python中用Ctrl+C終止多線程程序的問題解決
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
