通常使用select.select()
将需要一个连接对象列表,如下所示:
read, write, error = select(self.all_connections, [], [], 0.1)
说我有以下对象:
class remoteDevice(object)
def __init___(self, connection):
self.connection = connection
我会在接受连接后使用select之前创建一个remoteDevices列表并将它们附加到列表中:
conn = socket.accept()
newDevice = remoteDevice(conn)
all_devices.append(newDevice)
现在all_devices
将包含多个设备,并且它们的连接对象将提供给每个远程设备。
有没有办法可以将all_devices
传递给select语句来迭代每个connection
对象的remoteDevice
属性?我是否必须单独存储连接对象才能使用select.select()
?
答案 0 :(得分:3)
根据select.select()
文档,您可以提供具有fileno()
方法的一系列对象。您可以轻松地将该方法添加到您的班级:
class RemoteDevice(object):
def __init__(self, connection):
self.connection = connection
def fileno(self):
return self.connection[0].fileno()
fileno()
方法只返回连接套接字对象的文件描述符。由于您使用返回值RemoteDevice
实例化socket.accept()
,因此这是第一个项目为socket
对象的元组。