首页 > 代码库 > Python的信号处理与程序退出
Python的信号处理与程序退出
如果写的Python程序是多线程或多进程的,就涉及到程序安全退出的问题。
?
否则程序会死锁而无法退出(CTRL+C);
下面是示例代码:
import signal
import threading
def sig_handler(sig, frame):
try:
th_timeout.stop()
th_timeout.join()
except Exception, ex:
exit(0)
?
def main():
...
##set signal handler
signal.signal(signal.SIGTERM, sig_handler)
signal.signal(signal.SIGINT, sig_handler)
global th_timeout
th_timeout = threading.Thread(target=your_application, args=())
th_timeout.setDaemon(‘True‘)
th_timeout.start()
if __name__ == "__main__":
main()
?
一、多进程程序的退出
需要先将子进程逐个杀掉后再退出主进程,不然会导致主进程退出(CTRL+C)后子进程不退出而继续运行。?
二、多线程程序的退出
需要在启动多线程时将线程的"Daemon"属性设置为"True"(默认为"False"),否则程序会死锁而无法退出(CTRL+C);
下面是示例代码:
import signal
import threading
def sig_handler(sig, frame):
try:
th_timeout.stop()
th_timeout.join()
except Exception, ex:
exit(0)
?
def main():
...
##set signal handler
signal.signal(signal.SIGTERM, sig_handler)
signal.signal(signal.SIGINT, sig_handler)
global th_timeout
th_timeout = threading.Thread(target=your_application, args=())
th_timeout.setDaemon(‘True‘)
th_timeout.start()
if __name__ == "__main__":
main()
?
Python的信号处理与程序退出
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。