다음과 같이 Python 멀티 스레드 프로그램을 사용하고 있습니다. ctrl + c를 약 5 초 내에 누르면KeyboardInterrupt 예외가 발생합니다.Python에서 ctrl-c로 끝나는 파이썬 스레드
코드를 15 초 이상 실행하면 Ctrl + c에 응답하지 못했습니다. 15 초 후에 Ctrl + C를 누르면 작동하지 않습니다. KeyboardInterrupt 예외를 throw하지 않음입니다. 그 이유는 무엇일까요? 나는 이것을 리눅스에서 테스트했다.
threads = [t.join(1) for t in threads if t is not None and t.isAlive()]
의 제 실행하여 변수 threads
번째 실행 후
[None, None, None, None, None, None, None, None, None, None]
포함 후
#!/usr/bin/python
import os, sys, threading, time
class Worker(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
# A flag to notify the thread that it should finish up and exit
self.kill_received = False
def run(self):
while not self.kill_received:
self.do_something()
def do_something(self):
[i*i for i in range(10000)]
time.sleep(1)
def main(args):
threads = []
for i in range(10):
t = Worker()
threads.append(t)
t.start()
while len(threads) > 0:
try:
# Join all threads using a timeout so it doesn't block
# Filter out threads which have been joined or are None
threads = [t.join(1) for t in threads if t is not None and t.isAlive()]
except KeyboardInterrupt:
print "Ctrl-c received! Sending kill to threads..."
for t in threads:
t.kill_received = True
if __name__ == '__main__':
main(sys.argv)