python 协程 gevent
第三方协程模
- greenlet模块
示例代码: day12/greenlet_0.py
- 安装 : sudo pip3 install greenlet
- 函数
greenlet.greenlet(func)
功能:创建协程对象
参数:协程函数g.switch()
功能:选择要执行的协程函数
- gevent模块
示例代码: day12/gevent_test.py
示例代码: day12/gevent_server.py
- 安装:sudo pip3 install gevent
- 函数
gevent.spawn(func,argv)
功能: 生成协程对象
参数:func 协程函数argv 给协程函数传参(不定参)
返回值: 协程对象gevent.joinall(list,[timeout])
功能: 阻塞等待协程执行完毕
参数:list 协程对象列表timeout 超时时间gevent.sleep(sec)
功能: gevent睡眠阻塞
参数:睡眠时间* gevent协程只有在遇到gevent指定的阻塞行为时才会自动在协程之间进行跳转
如gevent.joinall(),gevent.sleep()带来的阻塞
- monkey脚本
作用:在gevent协程中,协程只有遇到gevent指定类型的阻塞才能跳转到其他协程,因此,我们希望将普通的IO阻塞行为转换为可以触发gevent协程跳转的阻塞,以提高执行效率。
转换方法:gevent 提供了一个脚本程序monkey,可以修改底层解释IO阻塞的行为,将很多普通阻塞转换为gevent阻塞。
使用方法
【1】 导入monkey
from gevent import monkey
【2】 运行相应的脚本,例如转换socket中所有阻塞
monkey.patch_socket()
【3】 如果将所有可转换的IO阻塞全部转换则运行all
monkey.patch_all()
【4】 注意:脚本运行函数需要在对应模块导入前执行
"""
gevent 协程 模块示例
"""
import gevent
from gevent import monkeymonkey.patch_time()
from time import sleep# 协程函数
def foo(a, b):print('Running foo ...', a, b)sleep(1)print('Foo again..')def bar(a, b):print('Running bar ...', a, b)print('Bar again..')# 生成协程对象
f = gevent.spawn(foo, 1, 2)
b = gevent.spawn(bar, 11, 22)# 4 = 睡眠时间
# gevent.sleep(4)# 阻塞等待f,b两个协程执行完毕
gevent.joinall([f, b])
"""
gevent server 基于协程的TCP并发思路:
1.将每个客户端的处理设置设为协程函数
2.让socket模块下的阻塞可以出发协程跳转
"""import gevent
from gevent import monkey# 执行脚本,修改socket阻塞
monkey.patch_all()
from socket import *# 创建tcp套接字
s = socket()
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
s.bind(('0.0.0.0', 28282))
s.listen(3)def handle(c):while True:data = c.recv(1024).decode()if not data:breakprint(data)c.send(b'OK')# 循环接收客户端连接
while True:c, addr = s.accept()print('Connect from', addr)# 处理具体的客户端请求gevent.spawn(handle,c)
python 协程 gevent相关推荐
- Python 协程gevent
gevent是第三方库,通过greenlet实现协程,其基本思想是: 当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继 ...
- python协程gevent案例:爬取斗鱼美女图片
分析 分析网站寻找需要的网址 用谷歌浏览器摁F12打开开发者工具,然后打开斗鱼颜值分类的页面,如图: 在里面的请求中,最后发现它是以ajax加载的数据,数据格式为json,如图: 圈住的部分是我们需要 ...
- python协程gevent案例 爬取斗鱼图片过程解析 - python
文章来源: 敏而好学论坛 嗨学网www.piaodoo.com 欢迎大家相互学习 分析 分析网站寻找需要的网址 用谷歌浏览器摁F12打开开发者工具,然后打开斗鱼颜值分类的页面,如图: 在里面的请求中, ...
- python协程gevent monkey的MonkeyPatchWarning 警告
协程 猴子修补的MonkeyPatchWarning 警告 MonkeyPatchWarning: Monkey-patching ssl after ssl has already been imp ...
- Python并发之协程gevent基础
基本示例 from gevent import monkey monkey.patch_all() # 记住一定放在第一行,这里是打补丁的意思,time模块在使用协程gevent模块的时候,必须打补丁 ...
- python gevent async_谈谈Python协程技术的演进
原标题:谈谈Python协程技术的演进 Coding Crush Python开发工程师 主要负责岂安科技业务风险情报系统redq. 引言 1.1. 存储器山 存储器山是 Randal Bryant ...
- c++ 协程_理解Python协程(Coroutine)
由于GIL的存在,导致Python多线程性能甚至比单线程更糟. GIL: 全局解释器锁(英语:Global Interpreter Lock,缩写GIL),是计算机程序设计语言解释器用于同步线程的一种 ...
- python 协程原理_Python协程greenlet实现原理
greenlet是stackless Python中剥离出来的一个项目,可以作为官方CPython的一个扩展来使用,从而支持Python协程.gevent正是基于greenlet实现. 协程实现原理 ...
- python 协程、进程、线程_Python 中的进程、线程、协程
1. 进程 进程是正在运行的程序实例,是内核分配资源的最基本的单元.进程拥有自己独立的堆和栈,独立的地址空间,资源句柄.进程由 OS 调度,调度开销较大,在并发的切换过程效率较低. Python 提供 ...
最新文章
- Stack Overflow requires external JavaScript from another domain, which is blocked or failed to load.
- MySQL Proxy实现数据库读写分离
- 滨州行谋定乡音叙乡情-农业大健康·万祥军:考察特色产业
- Ibatis的类型处理器TypeHandler解析
- 在厚度仅十几微米的电池隔膜找缺陷?人工智能说,能行(人工智能应用案例)
- k8s 手动恢复redis 集群_高工面试之:redis的几种集群方式你都熟悉吗?
- 抽象类与抽象方法 c# 1613720553
- jquery 请求jsp传递json数据的方法
- 字段定义_联系人字段随需自定,知己知彼快速签单
- AndroidQQ登录接入详细介绍(kotlin搭建)
- 91卫图助手下载器永久免费啦!!
- 10万套PPT模板素材,SmileTemplates全球最大PPT资源下载网站
- 浏览器内核控制Meta标签说明文档(360浏览器默认极速模式)
- 使用canvas在原有图片上进行画框并保存
- javascript event click/dblclick left/right区分左键、右键、双击事件,排除点击事件与拖拽事件冲突,做防抖优化
- 未报告的异常错误IOException; 必须对其进行捕获或声明以便抛出
- YY语音无有效验证导致下载执行任意程序
- OPPO Watch 2五大亮点加持 定位旗舰全智能手表
- 十大改名换姓的经典名著
- ppt如何导出成高清图片