下面是乙個網上**的實現思路,經過oyyaovp驗證,發現是可行的,就記錄下來。
思路python多執行緒中要響應ctrl+c的訊號以殺死整個程序,需要:
1.把所有子執行緒設為daemon;
2.使用isalive()函式判斷所有子執行緒是否完成,而不是在主線程中用join()函式等待完成;
3.寫乙個響應ctrl+c訊號的函式,修改全域性變數,使得各子執行緒能夠檢測到,並正常退出。
原始碼#!/usr/bin/env python
#encoding: utf-8
#filename: signal_demo.py
import threading, swww.cppcns.comignal
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, exite程式設計客棧d=%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()
命令列執行
pytwww.cppcns.comhon signal_demo.py
截圖參考文獻
python中用ctrl+c終止多執行緒程式的問題解決
本文標題: python多執行緒下訊號處理程式示例
本文位址:
多執行緒下的訊號處理
參考apue 1.同乙個程序下的所有執行緒共享 訊號的處理方式,所以乙個執行緒改變對訊號的處理方式,那所有執行緒如果收到該訊號都會是那樣處理的 2.sigprocmask用於單執行緒的程序中阻止訊號傳送,但是在多執行緒的程序中並沒有定義 執行緒必須使用pthread sigmask.a.如果有的執行...
Linux 多執行緒應用 訊號產生,訊號處理
筆者有一種應用場景,a 執行緒從 socket 接收指令,根據指令在 b 執行緒進行相應工作。採用訊號機制,設定 sigusr1 的訊號處理函式 sighandler,a 執行緒解析指令後發射訊號 sigusr1,b 執行緒執行sighandler.因對 posix 訊號機制不熟,過程中產生了一些誤...
LINUX下多執行緒和訊號
說實話,訊號是我討厭的東西,在我些的 中,我都想用最簡單的辦法來處理它,現在遇到多執行緒中訊號的處理,apue中的說法也看得不是很懂,csdn中一位朋友有如下的總結,先記在這裡。1.預設情況下,訊號將由主程序接收處理,就算訊號處理函式是由子執行緒註冊的 2.每個執行緒均有自己的訊號遮蔽字,可以使用s...