我想在 Python 中使用 Ctrl
+ C
停止执行进程。但我在某处读到 KeyboardInterrupt
异常仅在主线程中引发。我还读到主线程在子线程执行时被阻塞。那么如何杀死子线程呢?
例如, Ctrl
+ C
对以下代码无效:
def main():
try:
thread = threading.Thread(target=f)
thread.start() # thread is totally blocking (e.g. while True)
thread.join()
except KeyboardInterrupt:
print "Ctrl+C pressed..."
sys.exit(1)
def f():
while True:
pass # do the actual work
原文由 Amit S 发布,翻译遵循 CC BY-SA 4.0 许可协议
问题是您正在使用
thread1.join()
,这将导致您的程序等待该线程完成才能继续。信号将始终被主进程捕获,因为它是接收信号的进程,它是具有线程的进程。
按照你展示的那样做,你基本上是在运行一个“正常”的应用程序,没有线程功能,因为你启动 1 个线程并等到它完成才能继续。