第三方协程模

  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. Stack Overflow requires external JavaScript from another domain, which is blocked or failed to load.
  2. MySQL Proxy实现数据库读写分离
  3. 滨州行谋定乡音叙乡情-农业大健康·万祥军:考察特色产业
  4. Ibatis的类型处理器TypeHandler解析
  5. 在厚度仅十几微米的电池隔膜找缺陷?人工智能说,能行(人工智能应用案例)
  6. k8s 手动恢复redis 集群_高工面试之:redis的几种集群方式你都熟悉吗?
  7. 抽象类与抽象方法 c# 1613720553
  8. jquery 请求jsp传递json数据的方法
  9. 字段定义_联系人字段随需自定,知己知彼快速签单
  10. AndroidQQ登录接入详细介绍(kotlin搭建)
  11. 91卫图助手下载器永久免费啦!!
  12. 10万套PPT模板素材,SmileTemplates全球最大PPT资源下载网站
  13. 浏览器内核控制Meta标签说明文档(360浏览器默认极速模式)
  14. 使用canvas在原有图片上进行画框并保存
  15. javascript event click/dblclick left/right区分左键、右键、双击事件,排除点击事件与拖拽事件冲突,做防抖优化
  16. 未报告的异常错误IOException; 必须对其进行捕获或声明以便抛出
  17. YY语音无有效验证导致下载执行任意程序
  18. OPPO Watch 2五大亮点加持 定位旗舰全智能手表
  19. 十大改名换姓的经典名著
  20. ppt如何导出成高清图片

热门文章

  1. 方便实用的六款解压缩软件
  2. thymeleaf渲染
  3. Linux挖矿病毒清理流程
  4. 常用站长工具软件汇总,有没有一款你在用?
  5. PageHelper使用注意
  6. CACL高校AI算法联赛S2赛季第一轮顺利结束,第二轮即将开始!
  7. 6、查询电脑上连接的网络的IP地址
  8. 百亿互金平台技术栈大起底
  9. 行测【推理判断之逻辑判断】
  10. 个人网站SEO推广方法