【发布时间】:2016-11-16 20:28:11
【问题描述】:
我正在实现一个套接字客户端,它同时打开多个套接字。任何套接字可能在不同时间有数据,我想在任何套接字有数据并且可读时执行代码。
我不确定如何实现这一点,我正在查看 select.select 但它似乎在等待所有套接字都可读。
我想避免使用多处理来处理套接字上的数据,我希望它在从每个套接字读取时是串行的,但在有可用数据时读取。
如何等待任何套接字可读?
# psudo code
sockets = [sock1, sock2, sock3]
while True:
if len(sockets) == 0:
break
for sock in sockets:
if sock.has_data():
do_stuff(sock)
sockets.remove(sock)
sleep(0.1)
【问题讨论】:
-
select不会等待所有套接字都可读,它会在其中一个可读时返回。 -
无论您做什么,如果您不想阻塞,请不要忘记将套接字设置为非阻塞。您使用的每个功能都将是一个无法用于预测未来的状态报告功能。无论
select说什么,阻塞读取可以 阻塞。