我有下面这段代码:
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中断。然而,即使我在进入select之前有挂起的信号,我也不确定这是否有效?( connection_fd套接字设置为阻塞)。
是否有可能存在挂起信号,但select仍未中断?
发布于 2013-02-07 19:24:15
说得好。这让我想到Python上的信号被破坏了:-(
VB9-UANIC:在Python中有一个“挂起信号”的概念,因为在C级别,当信号处理程序被调用时,它只是设置一个标志,稍后将在安全点检查该标志。Python级别的信号处理程序(如果有的话)仅在以后从这些安全点之一调用。
这意味着如果我们不走运,信号正好在C代码调用"select“系统调用之前到达,那么C级信号处理程序将被调用并设置标志,但随后C代码将继续并调用"select”-这将不会被中断,因为没有信号了。
如果说有什么不同的话,那就是它表明信号在Python中不是可靠的通信方式。我甚至不知道如何修复它,顺便说一句:-(
编辑:这是http://bugs.python.org/issue5315。
https://stackoverflow.com/questions/14741915
复制相似问题