Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python select.select单套接字替代方案?_Python_Sockets - Fatal编程技术网

python select.select单套接字替代方案?

python select.select单套接字替代方案?,python,sockets,Python,Sockets,所以,假设我只有一个套接字,我需要管理它,以便在它处于活动状态时完成IO。使用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])

所以,假设我只有一个套接字,我需要管理它,以便在它处于活动状态时完成IO。使用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
如果只有一个套接字是可读/写的,那么没有更好的解决方案来检查吗?我将只处理一个套接字对象,不再处理。我觉得这种方法是为了管理多个套接字而设计的,因为可能有一种更有效的方法可以只处理一个套接字。

select()仍然是一种方法,即使对于单个套接字也是如此。唯一的替代方案(为了讨论而忽略类似于select()的poll()等替代方案)是阻止I/O,但如果在recv()中被阻止,则在套接字准备好写入时无法唤醒,反之亦然,如果在send()中被阻止


因此,您最好使用select()。将它用于单个套接字并没有什么低效的地方。

好吧,我只是觉得可以有一个替代方案,只用于一个套接字,感谢您记住,即使使用一个套接字,您仍然(可能)复用两个不同的东西:输入和输出。