Python socket select.select。使用对象列表而不是连接

时间:2016-09-05 09:14:54

标签: python sockets python-3.x

通常使用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()

1 个答案:

答案 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对象的元组。