Python中select.select的单个套接字替代方法?

0 投票
1 回答
1106 浏览
提问于 2025-04-17 22:35

假设我只有一个套接字(socket),需要在它活着的时候管理输入输出的完成。使用select.select()我可以这样做:

import socket
import select

a = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
a.setblocking(True)
connected = True

while connected:
    read, write, error = select.select([a], [a], [a])
    if read:
        #do stuff with data
    if write:
        #write to socket

但是,检查只有一个套接字是否可读或可写,难道没有更好的方法吗?我只会处理一个套接字对象,不会有其他的。我觉得这个方法是为了管理多个套接字而设计的,可能有更有效的方式来处理只有一个套接字的情况。

1 个回答

0

即使只处理一个套接字,使用select()仍然是最好的选择。我们暂时不讨论像poll()这样的其他选择,因为它们和select()很相似。唯一的替代方案是阻塞I/O,但如果你在recv()中被阻塞了,当套接字准备好可以写入时,你就没有办法被唤醒;反之,如果你在send()中被阻塞,也会遇到同样的问题。

所以,使用select()是最合适的选择。对于一个单独的套接字来说,使用它并没有什么效率上的问题。

撰写回答