通过Python发送多个HTTP请求的理想方法?

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不会依赖线程同时执行多个操作。相反,它需要一种合作的多任务处理方法---您的主脚本启动反应堆,反应堆调用您设置的功能。在反应堆继续工作之前,您的功能必须将控制权返回到反应堆。