gevent.signal -- Cooperative implementation of special cases of signal.signal()#

特例的合作实施 signal.signal()

此模块设计为与libev的儿童观察员一起使用,默认情况下在 gevent.os.fork() 注意每个 SIGCHLD 当信号发出时,处理器将在新的greenlet中运行(就像 gevent.hub.signal

此模块中的实现只有在 gevent.os.waitpid() 正在使用(默认值),如果 signal.SIGCHLD 可用;请参阅 gevent.os.fork() 有关将其配置为高级用途的信息,请不要这样做。

在 1.1b4 版本加入.

在 1.5a4 版本发生变更: 以前有一个向后兼容别名 gevent.signal ,在1.1b4中引入,部分隐藏了该模块,使人和静态分析工具都感到困惑。该别名已被删除。(参见 gevent.signal_handler


signal.getsignal() 除了在哪里 signal.SIGCHLD 关心。

为了 signal.SIGCHLD ,这与 signal() 提供一致的答案。

signal(signalnum, handler)[源代码]#

signal.signal() 除了在哪里 signal.SIGCHLD 关心。


A signal.SIGCHLD handler installed with this function will only be triggered for children that are forked using gevent.os.fork() (gevent.os.fork_and_watch()); children forked before monkey patching, or otherwise by the raw os.fork(), will not trigger the handler installed by this function. (It's unlikely that a SIGCHLD handler installed with the builtin signal.signal() would be triggered either; libev typically overwrites such a handler at the C level. At the very least, it's full of race conditions.)


使用 SIG_IGNSIG_DFL 可能还有与利贝夫儿童观察者和 gevent.subprocess 模块。

在 1.2a1 版本发生变更: 如果 SIG_IGNSIG_DFL 用于忽略 SIGCHLD ,未来使用 gevent.subprocess 而利比夫的儿童观察者将再次工作。但是,在python 2上,使用 os.popen 会失败的。

在 1.1rc2 版本发生变更: 允许使用 SIG_IGNSIG_DFL 重置和忽略 SIGCHLD . 但是,这允许在以下情况下出现比赛条件的可能性: gevent.subprocess 已经用过了。