要成功编写覆盖数据文件,请使用Python子流程 正在分析中必须干净利落地关闭并有机会 coverage.py运行它注册的atexit处理程序。
例如,如果您发送SIGTERM以结束子流程,但是您的 子进程从未注册任何SIGTERM处理程序,然后是一个覆盖 文件不会被写入。有关详细信息,请参阅atexit文档 处理程序未运行。
以上document似乎表示如果我使用SIGTERM
信号杀死子进程以便SIGTERM
可以运行,我需要为coverage.py
提供一个处理程序它注册的atexit
处理程序。
然而,我很困惑应该在coverage.py
的处理程序中放置什么,甚至不确定我的理解是否正确。
如果我的理解是正确的,例如,
# Each sub-process should register the signal handler.
def signal_handler(signum, frame):
# What should I do in here for coverage.py?
# Is it just enough to register the empty handler?
pass
signal.signal(signal.SIGTERM, signal_handler)
如果没有,该文件意味着什么?
答案 0 :(得分:0)
使用问题中定义的空信号处理程序,程序现在将忽略SIGTERM,这对于coverage.py非常有用,但是现在您的程序在收到TERM信号后将不会退出。处理程序需要以某种方式与进程的主线程进行通信,以使其停止运行,并迅速而优雅地进行。
如果您的程序使用线程,则它可能必须与每个线程接触,并类似地与它们通信,是时候停止它们在做什么了。您将要尝试避免信号处理程序中的任何复杂性,因为它不必知道程序的其余部分在做什么,但是无论哪种方式,将SIGTERM发送到您的程序都应该使它正常关闭下来,这是要实现的程序,而不是coverage.py,而不是您要运行的操作系统。
对于原始海报,这个答案可能有点晚了,但是我希望其他人会觉得有用。