2012-01-24 15 views
7

MX kayıtları için geniş bir etki alanı listesini denetleyen küçük bir komut dosyası var, her şey iyi çalışıyor ancak komut dosyası kayıtsız bir etki alanı bulduğunda, atlamak için oldukça uzun bir zaman gerekiyor sıradaki.Dnspython: Sorgu zaman aşımı/ömrünü ayarlama

query.lifetime = 1.0 
or 
query.timeout = 1.0 

ama bu bir şey yapmak görünmüyor:

Ben ekleyerek çalıştılar. Bu ayarın nasıl yapılandırıldığını bilen var mı?

Scriptim aşağıda, zaman ayırdığınız için teşekkürler.

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") 

cevap

15

Sen sonra zaman aşımı kuruyorsunuz zaten sorgu gerçekleştirilen ettik. Yani bu bir şey yapmayacak!

Bunun yerine ne istediğiniz bir Resolver nesne oluşturmak olduğunu onun zaman aşımı ayarlayın ve daha sonra query() yöntemini çağırın. dns.resolver.query(), bir varsayılan Resolver nesnesini başlatan ve query() yöntemini çağırır, böylece bir varsayılan Resolver istemiyorsanız, bunu elle yapmanız gereken bir kolaylık işlevidir.

resolver = dns.resolver.Resolver() 
resolver.timeout = 1 
resolver.lifetime = 1 

Sonra döngü içinde bu kullanın:

try: 
    domain = row[0] 
    query = resolver.query(domain,'MX') 
except: 
    # etc. 

Hepiniz sorgular için aynı Resolver nesneyi kullanmak gerekir.

+3

Çok teşekkür ederim, cevabınızı zaman aşımı ile denedim, ancak yine de aynı sorun vardı, ama resolver.lifetime = 1.0 kullanarak çalıştı. –

+1

Evet, farkın ne olduğundan emin değilim (asla bu kütüphaneyi kullanmayın) ama doğru özniteliği bulduğuna sevindim. – kindall

+0

"Zaman aşımı" nın denklemin sadece yarısı olduğunu unutmayın. OP'nin orijinal örneğinde olduğu gibi, 'yaşam süresi' de kullanılmalıdır. Http://comments.gmane.org/gmane.comp.python.dnspython.user/144 adresine bakın. –