python - 即使在线程中,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。
解决方案
推荐阅读
- javascript - 'vue' 未被识别为内部或外部命令
- sql-server - 将 SQL Server 数据库转换为 Azure 时收到有关 master.sys.sysclsobjs 的错误消息
- node.js - npm install 安装到哪个文件夹
- apache-kafka - 如何自动运行 Kafka Connect 连接器(例如在生产中)?
- codenameone - 如何处理组件及其容器中的指针事件?
- rpm - 安装 rpm 包时替换现有目录及其所有内容
- java - 全新安装的 Ubuntu 16.04 LTS 服务器和升级的服务器之间的编码问题
- php - 网络服务器上的 NumberFormatter 输出错误,而不是另一个
- python - 如何在不使用 refresh_from_db 的情况下强制 Django 模型在保存后重新加载字段?
- eclipse - 如何从 Eclipse 中自动编译和运行 xtext mydsl 应用程序?