Я реализую сокет-клиент, который одновременно открывает несколько сокетов. Любой сокет может иметь данные в другое время, и я хочу выполнить код, когда какой-либо сокет имеет данные и доступен для чтения.Как подождать, пока какой-либо сокет не получит данные?
Я не уверен, как это реализовать, я смотрел на 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' не ждет, когда все сокеты будут считаны читаемыми, он возвращается, когда один из них доступен для чтения. –
Что бы вы ни делали, не забудьте установить неблокирующие сокеты, если вы не хотите блокировать их. Каждая функция, которую вы используете, будет функцией отчетности о состоянии, которая не может использоваться для прогнозирования будущего. Блокировка read * может * блокировать, независимо от того, что 'select' сказал. –