首页 > 解决方案 > 每个进程调用一次信号处理程序

问题描述

我有一个产生多个进程的程序,我用 Ctrl+C 杀死它。

在程序开始时,我捕获信号以执行一些清理操作。

def cleanup(*_):
    # do cleanup operations here
    # ...
    exit(1)

# trap ctrl+c and hide the traceback message
signal(SIGINT, cleanup)

# spawn processes (pool of workers) and do work here
# ...

问题是cleanup被多次调用(每个正在运行的进程一次)。

我怎样才能使它cleanup只被调用一次?

标签: pythonmultiprocessingsignals

解决方案


您的子进程正在从其父进程继承信号处理程序。如果您希望处理程序仅在一个进程中执行,您可能想在子进程中取消注册处理程序。


推荐阅读