首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python select未被SIGCHLD打断

python select未被SIGCHLD打断
EN

Stack Overflow用户
提问于 2013-02-07 09:13:10
回答 1查看 518关注 0票数 0

我有下面这段代码:

代码语言:javascript
复制
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仍未中断?

EN

回答 1

Stack Overflow用户

发布于 2013-02-07 19:24:15

说得好。这让我想到Python上的信号被破坏了:-(

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

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

如果说有什么不同的话,那就是它表明信号在Python中不是可靠的通信方式。我甚至不知道如何修复它,顺便说一句:-(

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14741915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档