Dnspython: настройка времени ожидания / времени ожидания запроса - PullRequest
9 голосов
/ 24 января 2012

У меня есть небольшой скрипт, который проверяет большой список доменов для их записей MX, все работает нормально, но когда скрипт находит домен без записи, переход к следующему занимает довольно много времени.

Я попытался добавить:

query.lifetime = 1.0
or
query.timeout = 1.0

но это, похоже, ничего не делает. Кто-нибудь знает, как настроен этот параметр?

Мой скрипт ниже, спасибо за ваше время.

import dns.resolver
from dns.exception import DNSException
import dns.query
import csv

domains = csv.reader(open('domains.csv', 'rU'))
output = open('output.txt', 'w')
for row in domains:
    try:
        domain = row[0]
        query = dns.resolver.query(domain,'MX')
        query.lifetime = 1.0
    except DNSException:
        print "nothing here"
    for rdata in query:
            print domain, " ", rdata.exchange, 'has preference', rdata.preference
            output.writelines(domain)
            output.writelines(",")
            output.writelines(rdata.exchange.to_text())
            output.writelines("\n")

1 Ответ

17 голосов
/ 24 января 2012

Вы устанавливаете время ожидания после , когда вы уже выполнили запрос.Так что это ничего не сделает!

Вместо этого вы хотите создать Resolver объект, установить его тайм-аут, а затем вызвать его query() метод.dns.resolver.query() - это просто вспомогательная функция, которая создает экземпляр объекта Resolver по умолчанию и вызывает его метод query(), поэтому вам нужно сделать это вручную, если вы не хотите использовать Resolver.

resolver = dns.resolver.Resolver()
resolver.timeout = 1
resolver.lifetime = 1
* по умолчанию.1015 * Затем используйте это в своем цикле:
try:
    domain = row[0]
    query = resolver.query(domain,'MX')
except:
    # etc.

Вы должны иметь возможность использовать один и тот же объект Resolver для всех запросов.

...