grequests实际上就是封装了gevent里面的方法,然后配合requests实现异步的IO
grequests = gevent + request
安装grequests
pip3 install grequests
直接上代码
import grequests, requests
import time
urls = [
'http://www.baidu.com',
'http://www.taobao.com',
'http://python-requests.org',
'http://www.www.com',
]
def exception_handler(request, exception):
# print(request, exception)
print("Request failed")
def start_grequest1():
"""
使用.map返回的是一个列表
size 指定一次发出的请求数量,默认是None,在为默认值的情况下,不会发生节流
:return:
"""
start_t = time.time()
rs = (grequests.get(u) for u in urls)
"""如果请求失败,会将None加入列表中"""
reps = grequests.map(rs, size=100, exception_handler=exception_handler)
rep_size = sum(len(r.text) for r in reps)
t = time.time() - start_t
print(t)
print(rep_size)
start_grequest1()
def start_grequest2():
"""
使用.imap 返回的是一个生成器
size 指定一次发出的请求数量,默认值为2
:return:
"""
start_t = time.time()
rs = (grequests.get(u) for u in urls)
reps = grequests.imap(rs, size=100, exception_handler=exception_handler)
rep_size = sum(len(r.text) for r in reps)
t = time.time() - start_t
print(t)
print(rep_size)
start_grequest2()
def start_request():
start_t = time.time()
rs = [requests.get(u) for u in urls]
print(rs)
t = time.time() - start_t
print(t)
start_request()