Using Dnspython with Threads¶
Rdata types are immutable, and thus thread-safe.
Container objects like
Zone are not thread-safe, as they are mutable and not locked.
It is up to the caller to ensure safety if they are shared between
VersionedZone, however, is thread-safe. VersionedZones offer
read-only and read-write transactions. Read-only transactions access an
immutable version, and all the objects returned, including containers, are
immutable. Read-write transactions are only visible to their creator until
they are committed. Transaction creation and commit are thread-safe.
Transaction objects should not be shared between threads.
Resolver is not thread-safe with regards to configuration, but it is
safe for many threads to call the
resolve() method of a resolver.
The cache implementations for the resolver are also thread-safe, so if a
web-crawling application associates an
LRUCache with a Resolver, it will
be safe to have many crawler threads doing resolutions.
dns.query methods are also thread-safe. One caveat with these
functions is that if a socket or other context (e.g. a Requests
session or an SSL context) is passed to the function instead of
allowing the function to create it, then it is up to the application to
ensure thread safety if the context could be used by multiple threads.