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 )
- getsignal(signalnum)[源代码]#
和
signal.getsignal()除了在哪里signal.SIGCHLD关心。为了
signal.SIGCHLD,这与signal()提供一致的答案。
- signal(signalnum, handler)[源代码]#
和
signal.signal()除了在哪里signal.SIGCHLD关心。备注
A
signal.SIGCHLDhandler installed with this function will only be triggered for children that are forked usinggevent.os.fork()(gevent.os.fork_and_watch()); children forked before monkey patching, or otherwise by the rawos.fork(), will not trigger the handler installed by this function. (It's unlikely that a SIGCHLD handler installed with the builtinsignal.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_IGN和SIG_DFL可能还有与利贝夫儿童观察者和gevent.subprocess模块。在 1.2a1 版本发生变更: 如果
SIG_IGN或SIG_DFL用于忽略SIGCHLD,未来使用gevent.subprocess而利比夫的儿童观察者将再次工作。但是,在python 2上,使用os.popen会失败的。在 1.1rc2 版本发生变更: 允许使用
SIG_IGN和SIG_DFL重置和忽略SIGCHLD. 但是,这允许在以下情况下出现比赛条件的可能性:gevent.subprocess已经用过了。