Python 套接字选择.选择。使用对象列表而不是连接

Har*_*vey 2 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
Run Code Online (Sandbox Code Playgroud)

我将在接受连接后使用 select 之前创建一个远程设备列表,并将它们附加到列表中:

conn  = socket.accept()
newDevice = remoteDevice(conn)
all_devices.append(newDevice)
Run Code Online (Sandbox Code Playgroud)

现在all_devices将是多个设备的列表,并且它们的连接对象被赋予每个远程设备。

有没有办法可以传入all_devicesselect 语句来迭代connection每个remoteDevice对象的属性?我是否必须单独存储连接对象才能使用select.select()

mha*_*wke 5

根据select.select()文档,您可以提供一系列具有fileno()方法的对象。您可以轻松地将该方法添加到您的类中:

class RemoteDevice(object):
    def __init__(self, connection):
        self.connection = connection

    def fileno(self):
        return self.connection[0].fileno()
Run Code Online (Sandbox Code Playgroud)

fileno()方法只是返回连接的套接字对象的文件描述符。由于您RemoteDevice使用 的返回值进行实例化socket.accept(),因此这是一个其中第一项是socket对象的元组。