我目前正在重写一些使用python的select.select()
方法的代码,但是这些只会返回套接字对象,我必须将该套接字手动匹配到放在那里的类中的套接字在__init__
下。那个伪代码基本上是[classobject for classobject in classList if SocketFromSelection == class.socketobject][0]
(我正在使用它)。
我在python文档中发现,在select.select()
中,你也可以自己定义一个包装类,只要它有一个合适的fileno()方法(它真的返回一个文件描述符,而不仅仅是一个随机整数)“。
我的问题是,如何在类中附加一个fileno()方法,以便我可以将这些类的序列传递给select.select()
,以便它返回类而不仅仅是套接字?还有,这会在Windows上运行吗?如果没有,是否有更好的方法将套接字与类列表中的类匹配?
答案 0 :(得分:3)
从你问题中包含的代码中,听起来你有一个包含套接字的类(作为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
,而不是传递套接字,然后再排除哪个套接字对应哪个实例。