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.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_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
已经用过了。
Next page: gevent.subprocess
--合作社 subprocess
模块