以下は私のテストコードです。
python2.7 で実行すると、生成されたすべてのスレッドが終了するまでプログラムがシグナルを受信しないことが示されます。
一方、python3.2 では、メイン スレッドの sigintHandler のみが呼び出されます。
Python がスレッドとシグナルを処理する方法に混乱しています。スレッドを生成し、そのスレッド内でシグナル処理を行うにはどうすればよいですか? それはまったく可能ですか?
from __future__ import print_function
from threading import Thread
import signal, os, sys
from time import sleep
def sigintHandler(signo, _):
print("signal %d caught"%signo)
def fn():
print("thread sleeping")
sleep(10)
print("thread awakes")
signal.signal(signal.SIGINT, sigintHandler)
ls = []
for i in range(5):
t = Thread(target=fn)
ls.append(t)
t.start()
print("All threads up, pid=%d"%os.getpid())
for i in ls:
i.join()
while True:
sleep(20)