Наиболее распространенное использование для выбора - это учитывать только параметры rlist
и timeout
.Для вашего примера кода это должно быть:
while True:
readers, writers, err = select([s], [], [])
if s in readers:
data = s.recv(1024)
print(data)
Параметр wlist
используется только тогда, когда приложению может потребоваться записать большие данные.В этом случае данные для записи в сокет просто ставятся в очередь, и сокет добавляется в wlist
.Когда возвращается select
и есть что-то для записи в сокет, программа пытается записать, и если что-то остается, она снова помещается в очередь (будьте осторожны: нужно вставить в головную часть ...) и сокетосталось в wlist
.Если все написано и очередь пуста, сокет удаляется из wlist
.
. В приведенном выше тексте очередь может быть истинной двойной конечной очередью или простой bytes
буфер или любой другой контейнер, позволяющий добавлять байты на обоих концах.Один должен существовать в сокете.