我想在多線程python程序中執行某個信號處理程序。 我注意到我的信號處理函數被調用主線程和我創建的另一個線程(thread_1)。 有沒有辦法僅對thread_1執行信號處理程序? 或者有無論如何知道信號處理程序的調用線程的線程ID?它是主線程還是thread_1?python多線程信號
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?