Вас не смущает тот факт, что нельзя задать лимит времени на обработку сетевого запроса? Другими словами, вы не знаете, когда у вас отработает сетевой вызов. Обработка сетевого вызова будет длиться вечно, если вам не повезло с сервером, который выдаёт ответ.
У библиотеки 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()