在Python3中防止信号处理的竞争条件

2024-10-02 00:24:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在Debian上开发一个Python应用程序,它需要一些清理功能,同时它会从ether正常操作或可捕获的信号调用中关闭。以下是一些psudocode:

def exitHandler(sign, frame)
    ...
    variousCleanUp commands
    ...
    program ends here

def main()
    signal.signal(SIGINT, exitHandler)
    signal.signal(SIGTERM, exitHandler)

问题在于,我检测到在关闭程序时,会导致SIGINT和SIGTERM都被发送。因此exitHandler函数被调用两次,这不应该发生。在

我能做些什么来防止这种情况发生?在


Tags: 功能应用程序signal信号defdebianframecommands
1条回答
网友
1楼 · 发布于 2024-10-02 00:24:43

设置标志

execution = False

def exitHandler(sign, frame):
    global execution
    if execution:
        return
    execution = True
    ... # Rest of the code here

如果您有真正的并发性,请使用threading.Lock

^{pr2}$

相关问题 更多 >

    热门问题