如何等待任何套接字有数据? [英] How to wait for any socket to have data?

查看:92
本文介绍了如何等待任何套接字有数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在实现一个套接字客户端,它可以同时打开多个套接字.任何套接字可能在不同的时间都有数据,我想在任何套接字有数据并且可读的情况下执行代码.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆