知方号

知方号

信号

将唤醒文件描述符设置为 fd。 当接收到信号时,信号编号作为单个字节写入 fd。 库可以使用它来唤醒轮询或选择调用,从而允许完全处理信号。

返回旧的唤醒 fd(如果未启用文件描述符唤醒,则返回 -1)。 如果 fd 为 -1,则禁用文件描述符唤醒。 如果不是 -1,则 fd 必须是非阻塞的。 在再次调用 poll 或 select 之前,库需要从 fd 中删除任何字节。

启用线程时,该函数只能从主线程调用; 尝试从其他线程调用它会导致引发 ValueError 异常。

有两种常用方法可以使用此功能。 在这两种方法中,您都使用 fd 在信号到达时唤醒,但是它们在确定 哪个 信号已到达的方式上有所不同。

在第一种方法中,我们从 fd 的缓冲区中读取数据,字节值为您提供信号编号。 这很简单,但在极少数情况下会遇到问题:通常 fd 的缓冲区空间量有限,如果太多信号到达太快,则缓冲区可能已满,并且可能会丢失一些信号。 如果你使用这种方法,那么你应该设置warn_on_full_buffer=True,这至少会导致在信号丢失时向stderr打印警告。

在第二种方法中,我们使用唤醒 fd only 进行唤醒,并忽略实际字节值。 在这种情况下,我们只关心 fd 的缓冲区是空的还是非空的; 一个完整的缓冲区根本不表示有问题。 如果您使用这种方法,那么您应该设置 warn_on_full_buffer=False,这样您的用户就不会被虚假的警告消息所迷惑。

3.5 版更改: 在 Windows 上,该函数现在也支持套接字句柄。

3.7 版更改: 添加 warn_on_full_buffer 参数。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。