我有以下代码:
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套接字设置为阻塞)。
是否有可能存在未决信号,但仍然没有中断选择?
答案 0 :(得分:0)
好点。现在让我想到Python上的信号被破坏了: - (
VB9-UANIC:Python中存在“待处理信号”的概念,因为在C级别调用信号处理程序时,它只是设置一个标志,稍后将在安全点检查。 Python级信号处理程序(如果有的话)只能在以后从这些安全点之一调用。这意味着如果我们运气不好并且信号在C代码调用“select”系统调用之前到达,则调用C级信号处理程序并设置标志,然后C代码恢复并且调用“select”---不会被中断,因为没有信号。
如果有的话,它表明信号不是Python中可靠的通信手段。我甚至都看不出它是如何修复的,顺便说一下: - (