问题描述
我正在运行这个简单的代码:
I'm running this simple code:
import threading, time
class reqthread(threading.Thread):
def run(self):
for i in range(0, 10):
time.sleep(1)
print('.')
try:
thread = reqthread()
thread.start()
except (KeyboardInterrupt, SystemExit):
print('
! Received keyboard interrupt, quitting threads.
')
但是当我运行它时,它会打印
But when I run it, it prints
$ python prova.py
.
.
^C.
.
.
.
.
.
.
.
Exception KeyboardInterrupt in <module 'threading' from '/usr/lib/python2.6/threading.pyc'> ignored
实际上python线程忽略了我的+键盘中断并且不打印Received Keyboard Interrupt
.为什么?这段代码有什么问题?
In fact python thread ignore my + keyboard interrupt and doesn't print Received Keyboard Interrupt
. Why? What is wrong with this code?
推荐答案
尝试
try:
thread=reqthread()
thread.daemon=True
thread.start()
while True: time.sleep(100)
except (KeyboardInterrupt, SystemExit):
print '
! Received keyboard interrupt, quitting threads.
'
没有调用time.sleep
,主进程过早跳出try...except
块,所以KeyboardInterrupt
代码>未被捕获.我的第一个想法是使用 thread.join
,但这似乎会阻塞主进程(忽略 KeyboardInterrupt),直到 thread
完成.
Without the call to time.sleep
, the main process is jumping out of the try...except
block too early, so the KeyboardInterrupt
is not caught. My first thought was to use thread.join
, but that seems to block the main process (ignoring KeyboardInterrupt) until the thread
is finished.
thread.daemon=True
导致线程在主进程结束时终止.
thread.daemon=True
causes the thread to terminate when the main process ends.
这篇关于线程忽略键盘中断异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!