python选择不被SIGCHLD中断

时间:2013-02-07 01:13:10

标签: python select sigchld

我有以下代码:

try:
    r_l, w_l, e_l = select.select([connection_fd], [], [], timeout_secs)
except select.error as (err_no, msg):
    # get interrupted on select

当我的程序等待这个时,如果有信号(如SIGCHLD),select会被select.error中断。 但是,即使我在进入选择之前有待处理信号,我也不确定这是否有效? (connection_fd套接字设置为阻塞)。

是否有可能存在未决信号,但仍然没有中断选择?

1 个答案:

答案 0 :(得分:0)

好点。现在让我想到Python上的信号被破坏了: - (

VB9-UANIC:Python中存在“待处理信号”的概念,因为在C级别调用信号处理程序时,它只是设置一个标志,稍后将在安全点检查。 Python级信号处理程序(如果有的话)只能在以后从这些安全点之一调用。

这意味着如果我们运气不好并且信号在C代码调用“select”系统调用之前到达,则调用C级信号处理程序并设置标志,然后C代码恢复并且调用“select”---不会被中断,因为没有信号。

如果有的话,它表明信号不是Python中可靠的通信手段。我甚至都看不出它是如何修复的,顺便说一下: - (

编辑:这是http://bugs.python.org/issue5315