首页 > 解决方案 > 即使在线程中,Python 程序仍然在 KeyboardInterrupt 上停止

问题描述

我有一个程序可以从用户的个人音乐图表中抓取数据,然后将该数据输入到 Google 电子表格中,并且在该程序的某些点,例如在表格的初始设置期间,它不能以任何理由停止,否则在尝试将数据实际输入工作表时它会中断。我以为我已经通过使用线程解决了这个问题,代码如下:

from threading import Thread

a = Thread(target=sheets_setup)
a.start()
a.join()

这将在 Python IDLE 中完美运行,并且会阻止代码退出,直到设置完成,即使使用 KeyboardInterrupt。但是,当将程序编译为 .exe 或在 cmd 中运行时,程序将在键盘中断的情况下停止执行代码。但是,它仍然不会完全关闭程序,而是无限期地挂起,并在控制台中显示:

Traceback (most recent call last):
  File "main.py", line 455, in <module>
    a.join()
  File "C:\Python39\lib\threading.py", line 1029, in join
    self._wait_for_tstate_lock()
  File "C:\Python39\lib\threading.py", line 1045, in _wait_for_tstate_lock
    elif lock.acquire(block, timeout):
KeyboardInterrupt

我认为这是因为它在线程中运行而引起的,但是它使程序保持活动状态而不实际继续执行代码可能是这里最糟糕的情况。是否有可能让它继续执行代码直到线程完成,即使在键盘中断的情况下?

编辑:我发现了问题,它与线程无关,而是我正在运行 Selenium Webdriver 并在控制台中执行 Ctrl+C 导致 webdriver 关闭,即使代码会继续,导致错误,因为代码需要不再存在的 webdriver。

标签: pythonpython-3.xmultithreadingerror-handlingkeyboardinterrupt

解决方案


推荐阅读