如何等待任何套接字有数据? [英] How to wait for any socket to have data?
问题描述
我正在实现一个套接字客户端,它可以同时打开多个套接字.任何套接字可能在不同的时间都有数据,我想在任何套接字有数据并且可读的情况下执行代码.
I'm implementing a socket-client which opens several sockets at the same time. Any socket may have data at a different time and I want to execute code when any socket has data and is readable.
我不确定如何实现此功能,我正在查看 select.select ,但似乎要等待所有套接字都可读.
I'm not sure how to implement this, I was looking at select.select but it seems to wait for all the sockets to be readable.
我想避免使用多重处理来处理套接字上的数据,我希望它是串行读取每个套接字的,但是在有可用数据时读取.
I'd like to avoid using multiprocessing to handle data on the sockets, I would like it to be serial in reading from each socket but read when there is data available.
如何等待任何套接字可读?
How do I wait for any socket to be readable?
# 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
解决问题:
sockets = [sock1, sock2, sock3]
while sockets:
rlist, _, _ = select.select(sockets, [], [])
for sock in rlist:
do_stuff(sock)
sockets.remove(sock)
这篇关于如何等待任何套接字有数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!