我在某处读到KeyboardInterrupt
异常只在Python的主线程中引发。我还读到在子线程执行时主线程被阻塞。那么,这是否意味着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
在这种情况下,CTRL+ C对执行没有影响。它就像是无法收听信号。我理解这是错误的方式吗?有没有其他方法可以使用CTRL+ 杀死线程C?
发布于 2019-06-21 13:29:52
如果你想让主线程在加入时接收CTRL+ C信号,可以通过添加超时来join()
调用。
以下似乎正在起作用(daemon=True
如果您希望main实际结束,请不要忘记添加):
thread1.start()
while True:
thread1.join(600)
if not thread1.isAlive():
break
https://stackoverflow.com/questions/-100009099
复制相似问题