python多線程下信號(hào)處理程序示例
本文實(shí)例為大家分享了python多線程下信號(hào)處理程序示例的具體代碼,供大家參考,具體內(nèi)容如下
下面是一個(gè)網(wǎng)上轉(zhuǎn)載的實(shí)現(xiàn)思路,經(jīng)過(guò)驗(yàn)證,發(fā)現(xiàn)是可行的,就記錄下來(lái)。
思路
python多線程中要響應(yīng)Ctrl+C的信號(hào)以殺死整個(gè)進(jìn)程,需要:
1.把所有子線程設(shè)為Daemon;
2.使用isAlive()函數(shù)判斷所有子線程是否完成,而不是在主線程中用join()函數(shù)等待完成;
3.寫(xiě)一個(gè)響應(yīng)Ctrl+C信號(hào)的函數(shù),修改全局變量,使得各子線程能夠檢測(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()
命令行運(yùn)行
python signal_demo.py
截圖

參考文獻(xiàn)
Python中用Ctrl+C終止多線程程序的問(wèn)題解決
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python執(zhí)行系統(tǒng)命令的五種方式小結(jié)
在日常開(kāi)發(fā)中,有時(shí)需要在Python腳本中執(zhí)行系統(tǒng)命令,Python有五種方式來(lái)執(zhí)行系統(tǒng)命令(推薦使用第五種),本文為大家整理了這五種方法的具體使用,希望對(duì)大家有所幫助2024-01-01
python 實(shí)現(xiàn)目錄復(fù)制的三種小結(jié)
今天小編就為大家分享一篇python 實(shí)現(xiàn)目錄復(fù)制的三種小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
PyTorch 解決Dataset和Dataloader遇到的問(wèn)題
今天小編就為大家分享一篇PyTorch 解決Dataset和Dataloader遇到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
python3 deque 雙向隊(duì)列創(chuàng)建與使用方法分析
這篇文章主要介紹了python3 deque 雙向隊(duì)列創(chuàng)建與使用方法,結(jié)合實(shí)例形式分析了python3 deque 雙向隊(duì)列創(chuàng)建、添加、清空、拷貝等相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下2020-03-03
對(duì)python使用telnet實(shí)現(xiàn)弱密碼登錄的方法詳解
今天小編就為大家分享一篇對(duì)python使用telnet實(shí)現(xiàn)弱密碼登錄的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
django xadmin action兼容自定義model權(quán)限教程
這篇文章主要介紹了django xadmin action兼容自定義model權(quán)限教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
使用pipenv管理python虛擬環(huán)境的全過(guò)程
pipenv 是Kenneth Reitz大神的作品,能夠有效管理Python多個(gè)環(huán)境,各種包,接下來(lái)通過(guò)本文給大家分享使用pipenv管理python虛擬環(huán)境的全過(guò)程,感興趣的朋友一起看看吧2021-09-09
詳解Python查找算法的實(shí)現(xiàn)(線性,二分,分塊,插值)
這篇文章主要為大家介紹了Python中常見(jiàn)的四種查找算法的實(shí)現(xiàn):線性、二分、分塊和插值,文中通過(guò)圖片詳細(xì)講解了它們實(shí)現(xiàn)的原理與代碼,需要的可以參考一下2022-04-04
python在Windows8下獲取本機(jī)ip地址的方法
這篇文章主要介紹了python在Windows8下獲取本機(jī)ip地址的方法,涉及Python中socket包相關(guān)函數(shù)的使用技巧,需要的朋友可以參考下2015-03-03

