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

use*_*786 10 python concurrency http httprequest

可能重复:
与urllib2或其他http库的多个(异步)连接?

我正在开发一个运行Python代码的Linux Web服务器,以通过第三方API从HTTP获取实时数据.数据被放入MySQL数据库.我需要对很多URL进行大量查询,我需要快速完成(更快=更好).目前我正在使用urllib3作为我的HTTP库.最好的方法是什么?我应该生成多个线程(如果是,有多少?)并且每个查询都有不同的URL?我很想听听你对此的看法 - 谢谢!

Pio*_*ost 26

如果有很多真的有很多比你可能想使用异步IO不线程.

requests + gevent = grequests

GRequests允许您使用带有Gevent的请求来轻松地进行异步HTTP请求.

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)
Run Code Online (Sandbox Code Playgroud)

  • 我无法使用grequest发送超过30个请求.当我这样做时,我得到"使用url超出最大重试次数:...,打开的文件过多".反正有没有解决这个问题? (5认同)
  • 警告:grequests似乎被放弃,并且没有错误处理.我的个人建议是https://github.com/ross/requests-futures,同样快,并且对于backports,也适用于2.7. (2认同)