Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python程序即使在线程中也仍然在键盘中断上停止_Python_Python 3.x_Multithreading_Error Handling_Keyboardinterrupt - Fatal编程技术网

Python程序即使在线程中也仍然在键盘中断上停止

Python程序即使在线程中也仍然在键盘中断上停止,python,python-3.x,multithreading,error-handling,keyboardinterrupt,Python,Python 3.x,Multithreading,Error Handling,Keyboardinterrupt,我有一个程序,可以从用户的个人音乐图表中提取数据,然后将数据输入谷歌电子表格,在这个程序中的某些点,例如在表格的初始设置过程中,它不能因为任何原因而停止,否则在尝试将数据实际输入表格时,它会中断。我想我已经通过使用线程解决了这个问题,代码如下: from threading import Thread a = Thread(target=sheets_setup) a.start() a.join() 这将在Python空闲状态下完美工作,并将阻止代码退出,直到安装完成,即使有键盘中断。但是

我有一个程序,可以从用户的个人音乐图表中提取数据,然后将数据输入谷歌电子表格,在这个程序中的某些点,例如在表格的初始设置过程中,它不能因为任何原因而停止,否则在尝试将数据实际输入表格时,它会中断。我想我已经通过使用线程解决了这个问题,代码如下:

from threading import Thread

a = Thread(target=sheets_setup)
a.start()
a.join()
这将在Python空闲状态下完美工作,并将阻止代码退出,直到安装完成,即使有键盘中断。但是,当将程序编译为.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
回溯(最近一次呼叫最后一次):
文件“main.py”,第455行,在
a、 加入
文件“C:\Python39\lib\threading.py”,第1029行,在join中
self.\u等待状态锁定()
文件“C:\Python39\lib\threading.py”,第1045行,在等待状态锁中
elif lock.acquire(块,超时):
键盘中断
我假设这是因为它在线程中运行而导致的,但它在不继续执行代码的情况下保持程序的活动性可能是这里最糟糕的情况。有没有可能让它继续执行代码直到线程完成,即使是在键盘中断的情况下


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

这是否回答了您的问题?或者@JonSG这似乎与我所寻找的正好相反,他们在问如何终止一个线程,我在寻找如何在任何情况下都不终止一个线程,直到它完成。对不起,这个链接将帮助你摆脱最坏的情况,而不是它将阻止终止。@JonSG啊,我明白了,是的,这会让我摆脱最糟糕的情况谢谢你,你知道有什么方法可以完全阻止终止,直到线程完成吗?