我正在实现一个同时打开多个套接字的socket客户机。任何套接字可能在不同的时间有数据,我想在任何套接字有数据且可读时执行代码。在
我不确定如何实现这一点,我正在研究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
来解决您的问题:如果您使用POSIX,请查看
select.poll
:如果您使用的是python3.4或更新版本,则标准库中有
selectors
模块。它将使用您的系统提供的“最佳”I/O多路复用实现(select、poll、kqueue…)在文档页的末尾有一个简单的echo服务器示例https://docs.python.org/3/library/selectors.html对于旧的Python版本也有一个backport。在
相关问题 更多 >
编程相关推荐