如何在Python中检测定时器是否过期并实现指定退出码?
Python定时器实现指定退出码的优化方案
问题根源
你第一段代码里的sys.exit(2)仅会终止定时器所在的子线程,主线程在启动定时器后没有阻塞或其他任务,会正常结束,导致整个进程最终以退出码0终止。
简洁有效的解决方法
方法一:直接终止整个进程(最简洁)
使用os._exit()替代sys.exit(),它会直接终止整个Python进程,不受线程限制,完全符合你的需求:
import os import threading def application_timeout(): print("The application is timeout\n") os._exit(2) timer = threading.Timer(20.0, application_timeout) timer.start()
方法二:主线程等待定时器后退出(更优雅)
如果希望进程正常执行清理操作,可让主线程等待定时器线程完成,再在主线程中调用sys.exit(2):
import sys import threading def application_timeout(): print("The application is timeout\n") timer = threading.Timer(20.0, application_timeout) timer.start() timer.join() # 主线程阻塞,直到定时器线程执行完毕 sys.exit(2)
关于你第二段代码的问题
你第二段代码中的while循环逻辑无效——timerstillalive会被立刻设为False,循环根本没有起到等待定时器的作用。上面的方法二用timer.join()替代了冗余的循环,逻辑清晰且代码简洁。
内容的提问来源于stack exchange,提问作者bbq123
相关产品推荐
相关产品推荐

