首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复python,urlopen错误[Errno 8],使用事件绿色

如何修复python,urlopen错误[Errno 8],使用事件绿色
EN

Stack Overflow用户
提问于 2015-08-18 07:13:40
回答 1查看 5.3K关注 0票数 1

这里是Python新手。

我正在使用eventlet和urllib2发出很多异步http请求。在我的档案顶端

代码语言:javascript
复制
import eventlet
import urllib
from eventlet.green import urllib2

然后,我提出了很多异步http请求,这些请求都成功地使用了这一行:

代码语言:javascript
复制
conn = urllib2.urlopen(signed_url, None)

突然间,我发现了一个错误:

代码语言:javascript
复制
URLError: <urlopen error [Errno 8] nodename nor servname provided, or not known>

此错误发生在相同的urllib2.urlopen行上,这很奇怪,因为它以前多次成功。此外,当我打印signed_url并将其粘贴到我的浏览器时,我会得到一个正确的响应,因此url的格式是正确的。

我在帖子中跳来跳去,但找不到正确的调试策略。从概念上讲,是什么导致了这个错误?你建议我怎么去修理它?

我正在使用Python2.7.6。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-18 11:43:23

“nodename nodename”错误意味着DNS解析失败。最可能的原因是上游DNS服务器的速率限制。如果您认真地进行web爬行,我可以推荐两种方法:

  • 简单:得到这个错误后,只要降低并发限制,每分钟发出的请求就会减少。将该错误的第一次N次出现作为临时的,在稍加延迟后重复获取URL。安装本地缓存递归DNS服务器(例如dnsmasq,unbound)。
  • 硬:拆分DNS解析和HTTP抓取。有要解析的DNS名称的单独队列。将URL、http://1.2.3.4/pathHost: domain头中解析的IP地址传递给urlopen。这将允许分别限制DNS请求和实际HTTP请求的并发性。如果大多数情况下,每个唯一的主机只获取一个请求,这将不会有帮助。发现自己有许多递归DNS服务器来分发工作,收集它们的响应时间统计数据,更频繁地使用更快的服务器。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32065895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档