gpt4 book ai didi

python - 模仿 fileno() 和 select 的行为

转载 作者:行者123 更新时间:2023-11-30 23:39:35 26 4
gpt4 key购买 nike

我正在尝试编写一个与 Python 2 标准库的 socket.socket 具有相同接口(interface)的类。

当程序尝试调用 select.select() 时,我在尝试重现对象应具有的行为时遇到问题。
select.select 条目中的文档说:

You may also define a wrapper class yourself, as long as it has an appropriate fileno() method (that really returns a file descriptor, not just a random integer).

我想尝试这样的事情:创建一个类似文件的对象,它可以由我的程序的一个线程使用 select 控制,而我的程序的另一个线程可以在我的对象准备好读写时设置它。我该怎么做?

最佳答案

fileno() 函数需要返回一个内核文件描述符,以便可以将其传递给 select 系统调用(或 poll/epoll/whatever)。由类选择操作完成的多路复用从根本上来说是一种必须在操作系统对象上工作的操作系统操作。

如果您想为不基于实际文件描述符的对象实现此功能,您可以执行以下操作:

  • 创建管道
  • 从 fileno() 返回管道的读取端
  • 当您想要将对象标记为“就绪”时,向另一端写入一个字节。这将唤醒所有选定的调用。
  • 请记住从真正的“读取”实现中读取该字节。

这个管道技巧应该是相当可移植的。

关于python - 模仿 fileno() 和 select 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13420405/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com