К сожалению, ответ может зависеть от ОС.Я отвечаю только в отношении Linux.
Я не знаю различий в отношении блокирующих / неблокирующих сокетов в select, но в linux на странице справки по системному вызову select
есть сообщение BUGSsection:
В Linux select () может сообщить дескриптор файла сокета как «готовый к чтению», но, тем не менее, при последующем чтении блокируется.Это может, например, произойти, когда данные поступили, но при проверке они имеют неверную контрольную сумму и отбрасываются.Могут быть другие обстоятельства, при которых файловый дескриптор ложно сообщается как готовый.Таким образом, может быть безопаснее использовать O_NONBLOCK на сокетах, которые не должны блокировать.
Я сомневаюсь в абстракции Python выше, которая могла бы "скрыть" эту проблему без побочных эффектов.
Что касаетсяблокирующая запись отправляет больше данных, что ожидается.send
будет блокироваться, пока не будет достаточно буферного пространства для передачи всего вашего запроса, если сокет блокируется.Если сокет не является блокирующим, он отправляет только столько, сколько может поместиться в буфере отправки сокета.