第三方协程模

  1. greenlet模块

示例代码: day12/greenlet_0.py

  • 安装 : sudo pip3 install greenlet
  • 函数
greenlet.greenlet(func)
功能:创建协程对象
参数:协程函数g.switch()
功能:选择要执行的协程函数
  1. 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相关推荐

  1. Python 协程gevent

    gevent是第三方库,通过greenlet实现协程,其基本思想是: 当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继 ...

  2. python协程gevent案例:爬取斗鱼美女图片

    分析 分析网站寻找需要的网址 用谷歌浏览器摁F12打开开发者工具,然后打开斗鱼颜值分类的页面,如图: 在里面的请求中,最后发现它是以ajax加载的数据,数据格式为json,如图: 圈住的部分是我们需要 ...

  3. python协程gevent案例 爬取斗鱼图片过程解析 - python

    文章来源: 敏而好学论坛 嗨学网www.piaodoo.com 欢迎大家相互学习 分析 分析网站寻找需要的网址 用谷歌浏览器摁F12打开开发者工具,然后打开斗鱼颜值分类的页面,如图: 在里面的请求中, ...

  4. python协程gevent monkey的MonkeyPatchWarning 警告

    协程 猴子修补的MonkeyPatchWarning 警告 MonkeyPatchWarning: Monkey-patching ssl after ssl has already been imp ...

  5. Python并发之协程gevent基础

    基本示例 from gevent import monkey monkey.patch_all() # 记住一定放在第一行,这里是打补丁的意思,time模块在使用协程gevent模块的时候,必须打补丁 ...

  6. python gevent async_谈谈Python协程技术的演进

    原标题:谈谈Python协程技术的演进 Coding Crush Python开发工程师 主要负责岂安科技业务风险情报系统redq. 引言 1.1. 存储器山 存储器山是 Randal Bryant ...

  7. c++ 协程_理解Python协程(Coroutine)

    由于GIL的存在,导致Python多线程性能甚至比单线程更糟. GIL: 全局解释器锁(英语:Global Interpreter Lock,缩写GIL),是计算机程序设计语言解释器用于同步线程的一种 ...

  8. python 协程原理_Python协程greenlet实现原理

    greenlet是stackless Python中剥离出来的一个项目,可以作为官方CPython的一个扩展来使用,从而支持Python协程.gevent正是基于greenlet实现. 协程实现原理 ...

  9. python 协程、进程、线程_Python 中的进程、线程、协程

    1. 进程 进程是正在运行的程序实例,是内核分配资源的最基本的单元.进程拥有自己独立的堆和栈,独立的地址空间,资源句柄.进程由 OS 调度,调度开销较大,在并发的切换过程效率较低. Python 提供 ...

最新文章

  1. 信息系统项目管理师复习第2小时
  2. 设计模式复习-单例模式
  3. 【ABAP】Smartforms无法打印字符串中空格问题处理
  4. 银行IT迎“高景气”时代,宇信科技如何领跑行业?
  5. .NET 6新特性试用 | PeriodicTimer
  6. php symfony urlmatcher-gt;match,symfony路由组件(The Routing Component)
  7. 计算机组成原理中ID是什么,计算机组成原理.doc
  8. 硬核推导Google AdaFactor:一个省显存的宝藏优化器
  9. 使用Hadoop自带的例子pi计算圆周率
  10. 汇编语言实现led灯的跑马灯
  11. Git学习文档之一 学习文档-并行开发
  12. hdu 3635 Dragon Balls 并查集应用记录每个点的转移次数
  13. 计算机GUI设计报告,GUI 程序设计实验报告.doc
  14. 程序员又双叒叕开始装逼了,这次用代码写合租广告,网友神评亮了
  15. vue和echarts实现地图航线
  16. 个人空间岁末大回报活动12月16日获奖名单
  17. php批量解密decoder,IonCube v8.3 Decoder解密工具
  18. 毛球科技细说隔离见证
  19. 牙齿底部粉色原因-ECR(External cervical resorption)
  20. 软件架构设计系列总结—写在前面

热门文章

  1. 当当网购物车和商品列表
  2. win7 64位频繁跳出“资源管理器已停止工作”的提示
  3. 实现文字图片生成,文字图片旋转及文字图片扭曲(python版)
  4. Linux 退出vim
  5. Modbus通信协议(Modbus protocol)
  6. 5.4.6. Exclusion Constraints
  7. 【CGroup原理篇】3. CGroup使用指南
  8. win2003 sp2跟卡巴冲突蓝屏解决方法
  9. 电音音效 matlab,数字信号处理Day1自制电子音乐
  10. python字典的值的类型_Python数据类型-字典