Python中select.select的单个套接字替代方法?
假设我只有一个套接字(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()是最合适的选择。对于一个单独的套接字来说,使用它并没有什么效率上的问题。