python异步requests_Python学习---IO的异步[gevent+Grequests模块]

安装gevent模块pip3 install gevent

Gevent实例import gevent

import requests

from gevent import monkey

# socket发送请求以后就会进入等待状态,gevent更改了这个机制

# socket.setblocking(False) -->发送请求后就不会等待服务器响应

monkey.patch_all() # 找到内置的socket并更改为gevent自己的东西

def fetch_async(method, url, req_kwargs):

print(method, url, req_kwargs)

response = requests.request(method=method, url=url, **req_kwargs)

print(response.url, response.content)

# ##### 发送请求 #####

gevent.joinall([

# 这里spawn是3个任务[实际是3个协程],每个任务都会执行fetch_async函数

gevent.spawn(fetch_async, method='get', url='https://www.python.org/', req_kwargs={}),

gevent.spawn(fetch_async, method='get', url='https://www.yahoo.com/', req_kwargs={}),

gevent.spawn(fetch_async, method='get', url='https://github.com/', req_kwargs={}),

])

519608-20180805105734116-1064570595.png

Gevent也是支持协程池##### 发送请求(协程池控制最大协程数量) #####

# 也可以理解为先最大发送2个请求,2个请求结束后发送第三个请求

from gevent.pool import Pool

pool = Pool(2) # 最多执行2个协程序,None表示不设置限制

gevent.joinall([

pool.spawn(fetch_async, method='get', url='https://www.python.org/', req_kwargs={}),

pool.spawn(fetch_async, method='get', url='https://www.yahoo.com/', req_kwargs={}),

pool.spawn(fetch_async, method='get', url='https://www.github.com/', req_kwargs={}),

])

Grequests

安装grequestspip3 install grequests

grequests实际上就是封装了gevent里面的方法,然后配合requests实现异步的IO

grequests = gevent + request

grequests.map() 内部实现

519608-20180805110022305-861262984.png

Grequest实例import grequests # 实际上就是requests + gevent

request_list = [

# 发送get请求

grequests.get('https://www.baidu.com/', timeout=10.001),

grequests.get('https://www.taobao.com/'),

grequests.get('https://hao.360.cn/')

]

# ##### 执行并获取响应列表 #####

response_list = grequests.map(request_list) # 实际上内部循环执行gevent内部的joinall()方法

print(response_list)

# ##### 执行并获取响应列表(处理异常) #####

# def exception_handler(request, exception):

# print(request,exception)

# print("Request failed")

# response_list = grequests.map(request_list, exception_handler=exception_handler)

# print(response_list)

519608-20180805110023492-771871810.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值