如何在主程序结束时终止线程?
如果我有一个线程在不停地循环,有没有办法在主程序结束时终止它?比如说,当我按下 Ctrl+C 的时候?
6 个回答
34
尝试将子线程设置为守护线程。
推荐的做法:
from threading import Thread
t = Thread(target=desired_method)
t.daemon = True # Dies when main thread (only non-daemon thread) exits.
t.start()
内联方式:
t = Thread(target=desired_method, daemon=True).start()
旧版API:
t.setDaemon(True)
t.start()
当你的主线程结束时(比如按下 Ctrl+C 组合键),其他线程也会根据上面的指令被终止。
132
如果你把你的工作线程设置为守护线程,那么当所有非守护线程(比如主线程)都结束时,这些守护线程也会自动结束。
http://docs.python.org/library/threading.html#threading.Thread.daemon
48
看看这个问题。正确的答案对如何正确结束线程有很好的解释:在Python中有没有办法杀死一个线程?
为了让线程在按下键盘中断信号(ctrl+c)时停止,你可以捕捉到“KeyboardInterrupt”这个异常,并在退出之前进行一些清理工作。像这样:
try:
start_thread()
except (KeyboardInterrupt, SystemExit):
cleanup_stop_thread()
sys.exit()
这样一来,你就可以控制程序在被突然终止时该做些什么。
你还可以使用内置的信号模块,这个模块可以让你设置信号处理器(在你的特定情况下是SIGINT信号):http://docs.python.org/library/signal.html