The real power of gevent comes when we use it for network and IO bound functions which can be cooperatively scheduled.

上面这句话是Python并发的一个库Gevent开始时谈到的

之前也曾有幸看过一个清华大佬的文章(不记得地址了), 稍微有点理解了Python本身的多线程其实任然不是真正的多线程。 所以一般看到只会在跟网络连接以及有IO操作的时候才会显现出现来。在查看这个Gevent库的时候意外看到这个句话,忍不住就想写下关于这个的小记录。

  • 据说Gevent只是协程~ ,根据我个人的理解,协程本质上就是在程序维度上的 线程。用了这个,就可以保证对于当前线程来说,只要加入到一个协程组(抽象来理解好说明)。那么在这一个组内,只要发现有一个停了(比如IO, 或者等待网路的情况),那么就可以交出控制权,让别的函数在这个时间进行。通过这样的调度,就可以使得整个程序运行的速度加快。
  • 交换控制权的方法也比价容易,gevent.sleep()这个函数就实现了关于控制权交换的问题。
  • 由于Python的线程使用起来本质上还是一个线程。甚至于由于其他的设计,还会导致时间更慢。(这个有点像经济学中的菜单成本)。既然用多线程不太现实了(除非你要IO)。那不如就直接用协程, 而且协程更为轻量级,怎么说,在Python中使用线程都不如使用协程。(这个是我自己的观点,不过还有很多很多的不同,如果各位大大有很不同意见,欢迎在评论区指出,不甚感激!)

这个库使用起来也是特别方便的

也不敢造次,就用官方来做解释吧

import geventdef foo():print('Running in foo')gevent.sleep(0)print('Explicit context switch to foo again')def bar():print('Explicit context to bar')gevent.sleep(0)print('Implicit context switch back to bar')gevent.joinall([gevent.spawn(foo),gevent.spawn(bar),
])

输出结果是:

Running in foo
Explicit context to bar
Explicit context switch to foo again
Implicit context switch back to bar

先用spawn来封装一下这个函数类。接着再用joinall将所有给拼接起来~
语言只是实现上的不同,逻辑都是还类似的。在C/C++中这个入门比较好,再写这个也比较轻松了~

Python并发Gevent库(一)相关推荐

  1. python内置库有哪些_python 内置库

    广告关闭 回望2020,你在技术之路上,有什么收获和成长么?对于未来,你有什么期待么?云+社区年度征文,各种定制好礼等你! version: 0. 2.0, configurations: }, de ...

  2. Python Gevent – 高性能的 Python 并发框架

    From:http://www.xuebuyuan.com/1604603.html Gevent 指南(英文):http://sdiehl.github.io/gevent-tutorial Gev ...

  3. Python的gevent协程及协程概念

    https://www.cnblogs.com/tkqasn/p/5705338.html 何为协程 协程,又称微线程.英文名Coroutine. 协程最大的优势就是协程极高的执行效率.因为子程序切换 ...

  4. python之gevent模块实现协程

    Python通过yield提供了对协程的基本支持,但是不完全.而第三方的gevent为Python提供了比较完善的协程支持. gevent是第三方库,通过greenlet实现协程,其基本思想是: 当一 ...

  5. Python自动化测试常用库整理

    参考:https://www.jianshu.com/p/b45d240eabac 今天花了一些时间,过了一下这几年自己用Python开发的自动化测试框架,然后将其中常用到Python库抽出来,简单整 ...

  6. 终于把python的所有库整理完毕了,现在一篇python库的字典诞生了

    库名称简介 添加小编学习群 832339352 即可自动获取大量python视频教程以及各类PDF! Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文 ...

  7. python的第三方库汇总

    Python 资源大全中文版 环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 python 版本管理工具.官网 pyenv:简单的 Python 版本管理工具.官网 Vex:可以 ...

  8. python web 常用库

    # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.[awesome-python](https://github.com/v ...

  9. 500个Python模块(库)的详细分类介绍

    常用模块 Chardet-------------字符编码探测器,可以自动检测文本.网页.xml的编码.colorama------------主要用来给文本添加各种颜色,并且非常简单易用.Prett ...

最新文章

  1. 计算机原理与基础 —— 进制之间的转换(二进制与十、八、十六禁止之间的转换)
  2. TextView 显示图像+文字的方法
  3. linux中使用xshell远程连接
  4. 深度搜索问题c语言,C语言实现的图的深度搜索与广度搜索程序.doc
  5. IOS15一个工作空间创建多个项目
  6. Android 虚拟机与真机调试配置
  7. 火了!杭州程序员自编“购房宝典”,点击超40万,业内人士惊呆
  8. MyEclipse 使用文档
  9. 【图像分割】基于matlab超像素SFFCM图像分割【含Matlab源码 1374期】
  10. 新手购买单反终极攻略--谈谈现场验机的要领与要点
  11. bibibi 下载_哔哩哔哩下载电脑版_哔哩哔哩官方版下载[bilibili]-下载之家
  12. 自定义OrderedMap
  13. word中取消链接上一节在哪_在WORD中怎样取消与上一节相同
  14. android app启动动画效果,Android 启动页优化及过渡动画
  15. php判断是否是全英文,php判断字符串是否全英文,纯中文,中英文组合的方法
  16. VUE二级/多级路由配置方式(嵌套路由)
  17. 百度输入法android+4.8,百度输入法Android v7.6来了 翻译功能上线助力跨国沟通
  18. JAVA疫情数据项目(JAVA课程设计)
  19. Unity使用FBX Exporter导入导出动画及FBX
  20. 零基础从微软官网制作纯净的U盘启动盘

热门文章

  1. 事件绑定及解除事件绑定
  2. 一步一步学ROP之gadgets和2free篇
  3. Mobile first! Wijmo 5 + Ionic Framework之:Hello World!
  4. weblogic管理2 - 创建并启动一个managed server
  5. 京东自建数据中心核心技术解密——运营管理篇
  6. 巧用linux云服务器下的的/dev/shm/,避开磁盘IO不给力!
  7. CHIL-SQL-FIRST() 函数
  8. [Linux]history 显示命令执行的时间
  9. android 布局权重问题(最近布局经常坑爹)
  10. Redis常用命令集