我想在多线程 python 程序中执行某个信号处理程序。我注意到我的信号处理程序是为主线程和我创建的另一个线程(thread_1)调用的。有没有办法只为thread_1执行信号处理程序?或者有什么方法可以知道调用信号处理程序的线程的线程ID?它是主线程还是thread_1?
import signal
import sys
from multiprocessing import Process
from time import sleep
x = 3;
def f(name):
print 'hello', name
while(1):
sleep (1)
print "AAAAAAAAAAAAAAAAAAAAAAAAA"
def signal_handler(signal, frame):
global x
print 'You pressed Ctrl+C!'
print x
sys.exit(0)
if __name__ == '__main__':
signal.signal(signal.SIGINT, signal_handler)
print 'Creating thread'
p = Process(target=f, args=('bob',))
p.start()
print 'Press Ctrl+C'
x += 6
signal.pause()
print 'After press CTRL+C'
得到一个输出:
Creating thread
Press Ctrl+C
hello bob
AAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAA
^CYou pressed Ctrl+C!
You pressed Ctrl+C!
9
3
正如你可以信号处理程序被调用两次(一个用于主线程,另一个用于thread_1),正如我上面所问的,我想只为thread_1执行处理程序,甚至找到一种方法来获取调用线程的thread_id?