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.SIGCHLD
handler 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
已经用过了。