Python:信号处理程序闭包未捕获环境

2024-05-23 09:46:02 发布

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

我遇到了this回复的帖子,它似乎表明作为信号处理程序安装的闭包应该捕获它们的环境,但是我没有看到(使用python2.7)。例如: 你知道吗

import os
import signal
import time

if __name__ == "__main__":
    pid = os.fork()
    if pid:
        signal.pause()
    else:
        sigint = False

        def handler(s, f):
            # global sigint
            print "sigint: {}".format(sigint)
            print "Signal handler"
            sigint = True

        signal.signal(signal.SIGINT, handler)

        signal.pause()
        if sigint:
            print "Caught sigint, sleeping briefly"
            time.sleep(2)
        print "exiting..."

使用^C运行和触发的操作将在子级中引发UnboundedLocalError: local variable 'sigint' referenced before assignment。取消对global声明的注释可以解决这个问题。显然这与前面的帖子不一致,是之前的帖子根本不正确,还是我在这里做错了什么?你知道吗

编辑:这里的分叉也是完全无关的,我本来打算调查一个不同的行为,当我注意到这一个,只是把小脚本逐字逐句。else块可以替换整个主线程以获得相同的结果。你知道吗


Tags: importsignaliftimeosthispidglobal

热门问题