Его можно использовать как в синхронном режиме (полная совместимость с обычным
модулем ADNS):
from concurrence.dns import *
engine = QueryEngine()
print engine.synchronous("www.yandex.ru", adns.rr.ADDR)
В этом случае программа заблокируется, пока не приедет ответ от DNS. Чтобы
запустить асинхронный режим, достаточно добавить одну букву:
print engine.asynchronous("www.yandex.ru", adns.rr.ADDR)
И всё, программа более не будет блокироваться при запросе.
Из дополнительных вкусностей - по умолчанию адреса DNS-серверов берутся
из /etc/resolv.conf, но можно предоставить и свою конфигурацию, например:
engine = QueryEngine(configtext="nameserver 8.8.8.8")
Один QueryEngine может обрабатывать множество одновременных запросов. Можно
запустить несколько QueryEngine - проблем не будет.
Вот пример работы программы, которая запускает 100 тасклетов и каждый из них
запрашивает адрес через гугловый DNS 8.8.8.8. Сначала синхронно:
real 0m5.125s
user 0m0.060s
sys 0m0.008s
А потом асинхронно:
real 0m0.145s
user 0m0.076s
sys 0m0.068s