Ideal method for sending multiple HTTP requests over Python?
Possible Duplicate:
Multiple (asynchronous) connections with urllib2 or other http library?
我正在开发一个运行Python代码的Linux Web服务器,以通过第三方API从HTTP获取实时数据。 数据被放入MySQL数据库。
我需要对很多URL进行大量查询,我需要快速完成(更快=更好)。 目前我正在使用urllib3作为我的HTTP库。
最好的方法是什么? 我应该生成多个线程(如果是,有多少?)并且每个查询都有不同的URL?
我很想听听你对此的看法 - 谢谢!
如果真的很多,你可能想要使用异步io而不是线程。
requests + gevent = grequests
GRequests允许您使用带有Gevent的请求来轻松地进行异步HTTP请求。
1 2 3 4 5 6 7 8 9 10 11 12 | import grequests urls = [ 'http://www.heroku.com', 'http://tablib.org', 'http://httpbin.org', 'http://python-requests.org', 'http://kennethreitz.com' ] rs = (grequests.get(u) for u in urls) grequests.map(rs) |
您应该使用多线程以及流水线请求。例如search-> details-> save
您可以使用的线程数不仅取决于您的设备。服务可以提供多少个请求?它允许运行多少个并发请求?甚至你的带宽都可能成为瓶颈。
如果你正在谈论一种抓取 - 服务可能会在一定的请求限制后阻止你,所以你需要使用代理或多个IP绑定。
至于我,在大多数情况下,我可以从python脚本在我的笔记本电脑上运行50-300个并发请求。
听起来像Twisted的优秀应用程序。以下是一些与Web相关的示例,包括如何下载网页。这是与Twisted数据库连接的相关问题。
请注意,Twisted不会依赖线程同时执行多个操作。相反,它需要一种合作的多任务处理方法---您的主脚本启动反应堆,反应堆调用您设置的功能。在反应堆继续工作之前,您的功能必须将控制权返回到反应堆。