如果写的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程序中多进程和多线程的安全退出,避免子进程或线程在主进程退出后仍继续运行的问题。对于多进程程序,需要先终止所有子进程再退出主进程;对于多线程程序,则需将线程设置为守护线程。
530

被折叠的 条评论
为什么被折叠?



