Python中的多线程网页请求 - '名称或服务未知
我有一个很大的抓取任务要做——这个脚本大部分时间都在等待,因为网络延迟很高。我想让脚本支持多线程,这样可以同时发送多个请求,但大约有10%的线程会因为以下错误而崩溃。
URLError: <urlopen error [Errno -2] Name or service not known>
其余90%的线程都能成功完成。我是在请求同一个网站的多个页面,所以看起来可能是DNS的问题。我一次发25个请求(也就是25个线程)。如果我把请求数量限制在5个以内,一切都正常,但一旦请求数量达到10个左右,我就会偶尔看到这个错误。
我看过一篇文章,讲的是在urllib2中重复的主机查找失败的问题,描述的就是我遇到的同样情况,我也按照里面的建议去做了,但没有效果。
我还尝试过使用多进程模块,而不是多线程,结果也是一样——大约10%的进程会因为同样的错误而崩溃——这让我觉得问题可能不在于urllib2,而是其他地方。
有人能解释一下发生了什么,并建议如何解决吗?
更新
如果我在脚本中手动写入网站的IP地址,一切都能正常工作,所以这个错误是在DNS查找的过程中发生的。