threading ignores KeyboardInterrupt exception(线程忽略 KeyboardInterrupt 异常)
问题描述
我正在运行这个简单的代码:
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 线程忽略了我的 Ctrl+C 键盘中断并且不打印 Received Keyboard Interrupt
.为什么?这段代码有什么问题?
In fact python thread ignore my Ctrl+C 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.
这篇关于线程忽略 KeyboardInterrupt 异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:线程忽略 KeyboardInterrupt 异常


- YouTube API v3 返回截断的观看记录 2022-01-01
- 检查具有纬度和经度的地理点是否在 shapefile 中 2022-01-01
- 我如何透明地重定向一个Python导入? 2022-01-01
- ";find_element_by_name(';name';)";和&QOOT;FIND_ELEMENT(BY NAME,';NAME';)";之间有什么区别? 2022-01-01
- 计算测试数量的Python单元测试 2022-01-01
- 我如何卸载 PyTorch? 2022-01-01
- 使用 Cython 将 Python 链接到共享库 2022-01-01
- 如何使用PYSPARK从Spark获得批次行 2022-01-01
- 使用公司代理使Python3.x Slack(松弛客户端) 2022-01-01
- CTR 中的 AES 如何用于 Python 和 PyCrypto? 2022-01-01