Comments (8)
I don't know of anything in dnspython specifically that would cause this. I think you have to look into which bit of code is using dnspython directly, and see what timeouts its using. Perhaps you can adjust them.
/Bob
from dnspython.
We're having the same issue, it seems that eventlet is setting a 10.0 seconds DNS Timeout. Changing the timeout setting doesn't seem to fix this behavior.
from dnspython.
Yes, it may be the problem with eventlet. Specifically, it may be that due to cooperative scheduling, CPU intensive parsing does not yield to IO tasks.
The other problem I faced with a similar environment/task is that your DNS resolver considers you are making too many requests and stops responding either due to network buffer overflows or because of rate limits. If that's the case, a sleep(5)
before each HTTP query would help.
Please, measure responsiveness of your code. Does it use a lot of CPU or does it spend all time in IO waits?
For example, spawn a greenthread with roughly this code:
def heartbeat():
while True:
t1 = time.time()
eventlet.sleep(0.1)
td = time.time() - t1
print(td)
and graph it to show median and spikes. If graphing is too hard, just attach raw values.
from dnspython.
The same question was asked here http://stackoverflow.com/questions/15706173/dnspython-and-lookup-timed-out
linking for the history.
from dnspython.
I'm having similar issues with Gevent and dnspython.
I'll post if I find out more.
from dnspython.
I found out that dnspython is using non-blocking IO with busy waiting. Honestly, I do not see a reason for that but it doesn't work well with gevent and probably other frameworks. I didn't find any explanation why this approach has been used. Could you please clarify?
from dnspython.
@henadzit could you link the relevant code?
If waiting is implemented properly, there could be no problem with gevent/eventlet even with monkey patching. Explicitly using non-blocking IO effectively bypasses gevent/eventlet magic, it works like regular event driven programming.
from dnspython.
On May 28, 2014, at 3:31, henadzit [email protected] wrote:
I found out that dnspython is using non-blocking IO with busy waiting. Honestly, I do not see a reason for that but it doesn't work well with gevent and probably other frameworks. I didn't find any explanation why this approach has been used. Could you please clarify?
It does not busy wait; it uses poll() or select(). It works this way because otherwise it wouldn't have fine-grained control over I/O timeouts.
You might be able to hook it into other frameworks by making a polling backend.
/Bob
from dnspython.
Related Issues (20)
- Query for SOA requires TSIG (for Catalog Zones). HOT 3
- Race conditions in dns.quic._asyncio can cause hangs or long closes
- response time while using asyncio is skewed HOT 2
- dnspython 2.x DNS lookup failed with "The DNS operation timed out" error over on Redhat HOT 7
- Question: resolving without chaining?
- Strange Behavior When Unpickling HOT 4
- [asyncio] Blocking call to import_module in rdata.py HOT 5
- Timeout for TXT records that are too large HOT 2
- Issue in Hostname Resolution with multiple Nameservers HOT 2
- Parsing of KEY records HOT 8
- AttributeError: 'NoneType' object has no attribute 'split' on importing dns.query HOT 7
- dns.resolver.override_system_resolver doesnt work in windows HOT 2
- Installing dnspython doesn't work HOT 2
- with `raise_on_no_answer=False`, dns.resolver.Answer objects evaluate inconsistently depending on what sections are present in a reply HOT 2
- New RRTYPE in IANA registry HOT 7
- Wrong A-records results HOT 4
- RFC 9567: EDNS0 Report-Channel (DNS Error Reporting) HOT 3
- More linting with ruff? HOT 1
- Resolver should raise more specific errors when Extended DNS Errors (RFC 8914) is used. HOT 5
- Nameservers not read correctly from Windows 10. HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dnspython.