Я должен установить тайм-аут на сокете Python recv метод. Как сделать это?
Типичный подход заключается в использовании select () для ожидания, пока данные станут доступны или пока не истечет время ожидания. Вызывайте recv ()
только тогда, когда данные действительно доступны. На всякий случай мы также установили сокет в неблокирующий режим, чтобы гарантировать, что recv ()
никогда не будет блокироваться бесконечно. select ()
также можно использовать для ожидания более чем на одном сокете одновременно.
import select
mysocket.setblocking(0)
ready = select.select([mysocket], [], [], timeout_in_seconds)
if ready[0]:
data = mysocket.recv(4096)
Если у вас много дескрипторов открытых файлов, poll () является более эффективной альтернативой select ()
.
Другой вариант - установить тайм-аут для всех операций с сокетом с помощью socket.settimeout ()
, но я вижу, что вы явно отклонили это решение в другом ответе.