0

我有以下代码:

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.error 中断。但是,即使我在输入 select 之前有待处理的信号,我也不确定这是否有效?(connection_fd 套接字设置为阻塞)。

是否有可能存在未决信号但 select 仍然没有被中断?

4

1 回答 1

0

好点子。现在让我觉得 Python 上的信号被破坏了:-(

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

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

如果有的话,它表明信号不是 Python 中可靠的通信方式。我什至不知道如何解决它,顺便说一句:-(

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

于 2013-02-07T11:24:15.483 回答