1

我目前正在重新编写一些使用 pythonselect.select()方法的代码,但这些只会返回我必须去的套接字对象,并手动将该套接字与放在__init__. 其伪代码基本上是[classobject for classobject in classList if SocketFromSelection == class.socketobject][0](我几乎在使用)。

我在 python 文档中发现select.select(),“你也可以自己定义一个包装类,只要它有一个适当的 fileno() 方法(它真的返回一个文件描述符,而不仅仅是一个随机整数)。”

我的问题是,我将如何在一个类中附加一个 fileno() 方法,以便我可以将这些类的序列传递给select.select()它,以便它返回类而不仅仅是套接字?另外,这会在Windows上运行吗?如果没有,是否有更好的方法将套接字与类列表中的类中的套接字匹配?

4

1 回答 1

4

从您在问题中包含的代码来看,听起来您有一个类,其中包含一个套接字(作为socketobject属性)。在这种情况下,您可以select通过代理包装器上的套接字fileno方法来使包装器对象能够:

def SocketWrapper(object):
    def __init__(self, socket):
        self.socketobj = socket # use whatever you are already doing

    def fileno(self):
        return self.socketobj.fileno()

现在您可以SocketWrapper直接将实例传递给select,而不是传递套接字,然后必须整理出哪个套接字对应于哪个实例。

于 2013-09-28T20:16:29.127 回答