Switch to the low-level interface of DNSPython?
DNSpython has two interfaces to the resolver, a high-level one (you create a dns.resolver.Resolver() object and then call its query() method) and a low-level one (create a message with dns.message.make_query() then call dns.query.udp(the_message). The first one is easier to use but some things cannot be done (for instance, it stupidly retries when the resolver returns SERVFAIL, until the timeout). The second interface provides a better control. DNS Looking Glass uses the high-level interface.
May be we should modify DNS Looking Glass to switch to the low-level one? Some things like parsing resolv.conf or handling retries and timeouts would have to be done by us, in that case.