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 提供 ...
最新文章
- 信息系统项目管理师复习第2小时
- 设计模式复习-单例模式
- 【ABAP】Smartforms无法打印字符串中空格问题处理
- 银行IT迎“高景气”时代,宇信科技如何领跑行业?
- .NET 6新特性试用 | PeriodicTimer
- php symfony urlmatcher-gt;match,symfony路由组件(The Routing Component)
- 计算机组成原理中ID是什么,计算机组成原理.doc
- 硬核推导Google AdaFactor:一个省显存的宝藏优化器
- 使用Hadoop自带的例子pi计算圆周率
- 汇编语言实现led灯的跑马灯
- Git学习文档之一 学习文档-并行开发
- hdu 3635 Dragon Balls 并查集应用记录每个点的转移次数
- 计算机GUI设计报告,GUI 程序设计实验报告.doc
- 程序员又双叒叕开始装逼了,这次用代码写合租广告,网友神评亮了
- vue和echarts实现地图航线
- 个人空间岁末大回报活动12月16日获奖名单
- php批量解密decoder,IonCube v8.3 Decoder解密工具
- 毛球科技细说隔离见证
- 牙齿底部粉色原因-ECR(External cervical resorption)
- 软件架构设计系列总结—写在前面
热门文章
- 当当网购物车和商品列表
- win7 64位频繁跳出“资源管理器已停止工作”的提示
- 实现文字图片生成,文字图片旋转及文字图片扭曲(python版)
- Linux 退出vim
- Modbus通信协议(Modbus protocol)
- 5.4.6. Exclusion Constraints
- 【CGroup原理篇】3. CGroup使用指南
- win2003 sp2跟卡巴冲突蓝屏解决方法
- 电音音效 matlab,数字信号处理Day1自制电子音乐
- python字典的值的类型_Python数据类型-字典