Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Network
  • » Невозможность задать timeout для urllib3/requests библиотек [RSS Feed]

#1 Янв. 11, 2017 08:45:03

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Невозможность задать timeout для urllib3/requests библиотек

Вопрос пользователям библиотек urllib3 и requests (работает поверх urllib3)
Вас не смущает тот факт, что нельзя задать лимит времени на обработку сетевого запроса? Другими словами, вы не знаете, когда у вас отработает сетевой вызов. Обработка сетевого вызова будет длиться вечно, если вам не повезло с сервером, который выдаёт ответ.

У библиотеки urllib3 есть механизм таймаутов `Timeout(connect=…, read=…), но они решают другие задачи: connect - это таймаут на подключение к серверу, read - таймат на ожидание очередной порции данных от сервера. Т.е. если read timeot равен одной секунде, а сервер выдаёт данные по одному байту раз в 0.5 секунд, то вы будете скачивать 100 килобайт оооочень долго и не выскочит никакой ошибки.

Можете сами проверить, вот код для запуска “медленного” сервера, который выдаёт данные в час по чайной ложке

from http.server import HTTPServer, BaseHTTPRequestHandler
import time

class SlowHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
while True:
self.wfile.write(b'x')
time.sleep(0.1)


def main():
server = HTTPServer(('', 8000), SlowHandler)
server.serve_forever()


if __name__ == '__main__':
main()

Отредактировано lorien (Янв. 11, 2017 08:45:44)

Офлайн

#2 Янв. 11, 2017 14:53:36

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Невозможность задать timeout для urllib3/requests библиотек

Не смущает. Я запросы делаю из очереди задач(celery), а в ней есть таймаут для всей таски.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Янв. 11, 2017 16:11:10

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Невозможность задать timeout для urllib3/requests библиотек

А я без celery и меня смущает. Но я уже зафиксил этот момент: https://github.com/lorien/grab/blob/master/grab/transport/urllib3.py#L294

Офлайн

  • Начало
  • » Network
  • » Невозможность задать timeout для urllib3/requests библиотек[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version