我试图用Python 2标准库socket.socket
的相同界面编写一个类。
当程序试图在其上调用select.select()
时,尝试重现该对象应具有的行为时出现问题。
select.select
条目中的文档说:
您也可以自己定义一个包装类,只要它有一个合适的fileno()方法(它实际上返回一个文件描述符,而不仅仅是一个随机整数)。
我想尝试这样的事情:创建一个类似文件的对象,可以用我的程序的一个线程用select控制,而我的程序的另一个线程可以在我的对象准备好读写时设置它。我该怎么办?
答案 0 :(得分:3)
fileno()函数需要返回一个内核文件描述符,以便它可以传递给select系统调用(或poll / epoll / whatever)。类似select的操作所做的多路复用基本上是一个必须在OS对象上运行的OS操作。
如果要为不基于实际文件描述符的对象实现此功能,可以执行以下操作:
这个管道技巧应该是相当便携的。