python多執行緒下訊號處理程式示例

2022-09-29 22:57:26 字數 1605 閱讀 4310

下面是乙個網上**的實現思路,經過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...