Dnspython:设置查询超时/生存期

Dnspython:设置查询超时/生存期,python,timeout,lifetime,dnspython,Python,Timeout,Lifetime,Dnspython,我有一个小脚本,它可以检查一大串域的MX记录,一切正常,但是当脚本找到一个没有记录的域时,需要相当长的时间才能跳到下一个域 我尝试补充: query.lifetime = 1.0 or query.timeout = 1.0 但这似乎没有任何作用。有人知道如何配置此设置吗 我的剧本在下面,谢谢你的时间 import dns.resolver from dns.exception import DNSException import dns.query import csv domains =

我有一个小脚本,它可以检查一大串域的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")

您正在执行查询后设置超时。那没什么用

相反,您要做的是创建一个
Resolver
对象,设置其超时时间,然后调用其
query()
方法
dns.resolver.query()
只是一个方便的函数,它实例化一个默认的
resolver
对象并调用其
query()
方法,因此如果您不想要一个默认的
resolver
,则需要手动执行该操作

resolver = dns.resolver.Resolver()
resolver.timeout = 1
resolver.lifetime = 1
然后在循环中使用此选项:

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

您应该能够对所有查询使用相同的
Resolver
对象。

是的,我不确定区别是什么(从未使用过该库),但我很高兴您找到了正确的属性。请注意
timeout
只是等式的一半。在OP的原始示例中,也应该使用
生存期
。见@JameS:linkdead。[official doc |“如果生存期到期,将发生超时异常。”。我测试了,是的。生存期足以取消搜索异常以捕获:
dns.exception.Timeout
。Meh,我的链接很难看。5分钟后无法编辑垃圾邮件。太棒了!我很难找到这个答案,但这就是答案!!:)