我希望在短时间内完成大量的反向DNS查找。目前,我已经使用socket.gethostbyaddr和concurrent.futures线程池实现了异步查找,但是仍然没有达到期望的性能。例如,脚本在2500个IP地址上运行了约22分钟。
我想知道是否有更快的方法来完成这项任务,而无需使用像adns-python这样的工具。我在http://blog.schmichael.com/2007/09/18/a-lesson-on-python-dns-and-threads/上找到了一些额外的背景信息。
代码片段:
ips = [...]
with concurrent.futures.ThreadPoolExecutor(max_workers = 16) as pool:
list(pool.map(get_hostname_from_ip, ips))
def get_hostname_from_ip(ip):
try:
return socket.gethostbyaddr(ip)[0]
except:
return ""
我认为问题的一部分是许多IP地址无法解析并超时。我尝试了以下操作:
socket.setdefaulttimeout(2.0)
但似乎它没有产生任何效果。