首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >子进程的coverage.py信号处理程序及出口

子进程的coverage.py信号处理程序及出口
EN

Stack Overflow用户
提问于 2018-05-05 13:13:05
回答 1查看 334关注 0票数 1

要成功地编写覆盖数据文件,分析中的Python子进程必须干净地关闭,并且coverage.py有机会运行它注册的atexit处理程序。 例如,如果您发送SIGTERM来结束子进程,但是您的子进程从未注册过任何SIGTERM处理程序,则不会写入覆盖文件。有关处理程序未运行的详细信息,请参阅atexit文档。

上面的文档似乎说,如果我用SIGTERM信号杀死一个子进程,那么coverage.py就需要为SIGTERM提供一个处理程序,这样coverage.py就可以运行它注册的atexit处理程序。

但是,我很困惑应该在coverage.py的处理程序中添加什么,甚至不确定我的理解是否正确。

例如,如果我的理解是正确的,

代码语言:javascript
运行
复制
# 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)

如果没有,这份文件意味着什么?

EN

回答 1

Stack Overflow用户

发布于 2019-11-04 19:30:12

使用问题中定义的空信号处理程序,程序现在将忽略SIGTERM,这对于coverage.py非常好,但是现在您的程序在接收到术语信号后不会退出。您的处理程序需要以某种方式与进程的主线程通信,告诉它停止它正在做的任何事情,既快速又优雅。

如果您的程序使用线程,它可能必须接触到每个线程,并以类似的方式向它们传达,是时候停止它们正在做的事情了。您可能希望将任何这种复杂性从您的信号处理程序中排除,因为它不应该知道您的程序的其余部分正在做什么,但是不管怎样,向您的程序发送SIGTERM应该会导致它优雅地关闭,而这是在程序上实现的,而不是coverage.py,而不是您正在运行的操作系统。

这个答案对于最初的海报来说可能有点晚了,但我希望其他人会发现它有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50189851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档