다음은 테스트 코드입니다.
python2.7에서 실행하면 생성 된 모든 스레드가 완료 될 때까지 프로그램에서 신호를받지 못한다는 것을 알 수 있습니다.
python3.2에서는 메인 스레드의 sigintHandler 만 호출됩니다.
파이썬이 스레드와 신호를 처리하는 방법과 혼동합니다. 그럼 스레드를 생성하고 해당 스레드 내에서 신호 처리를 수행하는 방법은 무엇입니까? 전혀 가능합니까?파이썬에서 비동기 신호 처리를 위해 별도의 스레드를 사용하는 방법
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)
은'sleep (10)'을'for range (10) for for '로 바꾸면 차이가 있습니다 : sleep (1)'? – shx2
그냥 시도했지만 아무런 차이가 없습니다 @ shx2 – adamsmith