Python学习---IO的异步[gevent+Grequests模块]
2023-09-11 14:20:11 时间
安装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={}), ])
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
安装grequests
pip3 install grequests
grequests实际上就是封装了gevent里面的方法,然后配合requests实现异步的IO
grequests = gevent + request
grequests.map() 内部实现
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)
相关文章
- Python快速学习08:模块的操作
- Python模块学习filecmp文件比较
- python:pip升级pip本身和setuptools(Python 3.7.15)
- Python模块学习filecmp文件比较
- Python下的XML-RPC客户端和服务端实现(基于xmlrpclib SimpleXMLRPCServer 模块)
- Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名、合并两个不同路径下图片文件名等目录/路径案例、正确加载图片路径)之详细攻略
- Python语言学习之文件夹那些事:python和文件夹的使用方法之详细攻略
- Python语言学习之文件格式后缀那些事:python和常见各种文件格式后缀介绍、使用方法之详细攻略
- 100天精通Python(基础篇)——第21天:模块和包
- 〖Python语法进阶篇⑰〗- 综合实战 - 抽奖系统之admin模块 - 对用户添加封禁身份修改
- 处理音频文件的python模块
- 【Python成长之路】python并发学习:多进程与多线程的用法及场景介绍
- 解惑Python模块学习,该如何着手操作...
- Python学习68:常用内建模块
- Python编程:python中的计时器timeit模块
- Python编程:watchdog模块监控系统文件变化
- Python编程:python-attrs模块的简单使用
- Python:随机生成测试数据的模块——faker的基本使用
- 〖Python语法进阶篇⑲〗- 综合实战 - 抽奖系统之user模块 - 获取用户与奖品列表