Во-первых, основная идея подозрительна. Ну, вы можете «знать» IP сервера, но это знание временно, и время его корректности контролируется DNS TTL. Для стабильной конфигурации администратор сервера может предоставить DNS-запись с длинным TTL (например, несколько дней), поэтому DNS-запрос всегда будет выполняться с использованием ближайшего решателя кэширования или nscd. Для изменения конфигурации TTL может быть уменьшен до нескольких секунд или даже до 0 (означает отсутствие кэширования), и это может быть полезно для некоторых видов балансировщиков нагрузки. Вы пытаетесь организовать собственный кэш распознавателя, который не знает TTL, и это может привести к запросам к неработающим или неправильным серверам с неверным содержимым. Поэтому я предлагаю не делать этого.
Если вы абсолютно уверены, что должны сделать это, и вы не можете использовать внешние инструменты в качестве пользовательского преобразователя или даже / etc / hosts, попробуйте установить пользовательский «opener» (см. Функцию urllib2.build_opener () в документации), который переопределяет Поиск DNS. Однако я никогда не делал этого, знания только о документации, прочитанной только сейчас.