Ну, это, вероятно, разрешение имен, которое заставляет вас так долго. Если вы посчитаете это (то есть, если так или иначе копай вернется очень быстро), Python должен иметь возможность иметь дело с тысячами записей легко.
Тем не менее, вы должны попробовать резьбовой подход. Это (теоретически) разрешает несколько адресов одновременно, а не последовательно. Вы могли бы так же хорошо использовать dig для этого, и это должно быть тривиально изменить мой примерный код ниже для этого, но чтобы сделать интересными вещи (и, надеюсь, больше pythonic), давайте использовать существующий модуль для этого: dnspython
Таким образом, установить его с помощью:
sudo pip install -f http://www.dnspython.org/kits/1.8.0/ dnspython
А потом попробовать что-то вроде следующего:
import threading
from dns import resolver
class Resolver(threading.Thread):
def __init__(self, address, result_dict):
threading.Thread.__init__(self)
self.address = address
self.result_dict = result_dict
def run(self):
try:
result = resolver.query(self.address)[0].to_text()
self.result_dict[self.address] = result
except resolver.NXDOMAIN:
pass
def main():
infile = open("domainlist", "r")
intext = infile.readlines()
threads = []
results = {}
for address in [address.strip() for address in intext if address.strip()]:
resolver_thread = Resolver(address, results)
threads.append(resolver_thread)
resolver_thread.start()
for thread in threads:
thread.join()
outfile = open('final.csv', 'w')
outfile.write("\n".join("%s,%s" % (address, ip) for address, ip in results.iteritems()))
outfile.close()
if __name__ == '__main__':
main()
Если это доказывает, чтобы начать слишком много потоков, в то же время, вы можете попробовать сделать это в партиях , или используя очередь (см. http://www.ibm.com/developerworks/aix/library/au-threadingpython/)
Показать сценарий или псевдокод сценария. Таким образом, мы можем предложить улучшения. Список тысяч за 15 минут должен быть легко ограничен ограничениями на python. – Kieveli
+1, пожалуйста, покажите нам, что у вас есть. Кстати, если я правильно понял, вполне вероятно, что это разрешение имен, а не сам сценарий, который занимает так много времени. Если это так, вы можете попробовать использовать потоковое решение. – rbp
Добавлено в соответствии с запросом. – Tom