python多线程之gevent

因为python线程的性能问题,在python中使用多线程运行代码经常不能达到预期的效果。而有些时候我们的逻辑中又需要开更高的并发,或者简单的说,就是让我们的代码跑的更快,在同样时间内执行更多的有效逻辑、减少无用的等待。gevent就是一个现在很火、支持也很全面的python第三方协程库。
gevent是python的一个并发框架,以微线程greenlet为核心,使用了epoll事件监听机制以及诸多其他优化而变得高效。而且其中有个monkey类,将现有基于Python线程直接转化为greenlet(类似于打patch)。在运行时的具体流程大概就是:
当一个greenlet遇到IO操作时,比如访问网络/睡眠等待,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行。由于IO操作非常耗时,经常使程序处于等待状态,有了gevent为我们自动切换协程,就保证总有greenlet在运行,而不是等待IO。同时也因为只有一个线程在执行,会极大的减少上下文切换的成本。
gevent基本使用

# -*- coding: utf-8 -*-import geventdef func1():for i in range(10):print(gevent.getcurrent(),i)gevent.sleep(1)  # 模拟将来可能会出现的耗时操作def func2():for i in range(10):print(gevent.getcurrent(),i)gevent.sleep(1)g1 = gevent.spawn(func1)
g2 = gevent.spawn(func2)
gevent.joinall([g1,g2])

输出结果如下:

<Greenlet at 0x25dcdfeb648: func1> 0
<Greenlet at 0x25dcdfebb48: func2> 0
<Greenlet at 0x25dcdfeb648: func1> 1
<Greenlet at 0x25dcdfebb48: func2> 1
<Greenlet at 0x25dcdfeb648: func1> 2
<Greenlet at 0x25dcdfebb48: func2> 2
<Greenlet at 0x25dcdfeb648: func1> 3
<Greenlet at 0x25dcdfebb48: func2> 3
<Greenlet at 0x25dcdfeb648: func1> 4
<Greenlet at 0x25dcdfebb48: func2> 4
<Greenlet at 0x25dcdfeb648: func1> 5
<Greenlet at 0x25dcdfebb48: func2> 5
<Greenlet at 0x25dcdfeb648: func1> 6
<Greenlet at 0x25dcdfebb48: func2> 6
<Greenlet at 0x25dcdfeb648: func1> 7
<Greenlet at 0x25dcdfebb48: func2> 7
<Greenlet at 0x25dcdfeb648: func1> 8
<Greenlet at 0x25dcdfebb48: func2> 8
<Greenlet at 0x25dcdfeb648: func1> 9
<Greenlet at 0x25dcdfebb48: func2> 9

Python多线程之gevent相关推荐

  1. python多线程之setDaemon和join

    简单介绍:线程是程序执行的一个最小单元,当开启多线程时,主线程会创建多个子线程,在python中,默认情况下主线程执行完自己的任务之后就会退出,子线程会继续执行自己的任务,直到自己的任务结束为止. 不 ...

  2. python多线程之threading

    一.创建线程的方法 1.用 thread.Thread 直接在线程中运行函数 import threading def threadfun(x,y): #线程任务函数 threadfun() for ...

  3. linux 线程pthread_detach,linux线程之pthread_join和pthread_detach

    在任何一个时间点上,线程是可结合的(joinable)或者是分离的(detached).一个可结合的线程能够被其他线程收回其资源和杀死.在 被其他线程回收之前,它的存储器资源(例如栈)是不释放的.相反 ...

  4. Python3——多线程之threading模块

    Python3--多线程之threading模块 目录 Python3--多线程之threading模块 Threading模块的对象 Threading模块的Thread类 queue模块(线程间通 ...

  5. python可以处理多大的数据_科多大数据之Python基础教程之Excel处理库openpyxl详解...

    原标题:科多大数据之Python基础教程之Excel处理库openpyxl详解 科多大数据小课堂来啦~Python基础教程之Excel处理库openpyxl详解 openpyxl是一个第三方库,可以处 ...

  6. python的excell库_扣丁学堂Python基础教程之Excel处理库openpyxl详解

    扣丁学堂Python基础教程之Excel处理库openpyxl详解 2018-05-04 09:49:49 3197浏览 openpyxl是一个第三方库,可以处理xlsx格式的Excel文件.pipi ...

  7. Python培训班线上线下哪种靠谱

    Python近几年在人工智能领域的快速发展,引起了很多人的注意,各种Python培训机构也越来越多,很多零基础的同学都想通过报培训班学习,目前互联网的发达,Python培训分为线上和线下,那么Pyth ...

  8. Python培训教程之Python基础知识点梳理

    Python语言是入门IT行业比较快速且简单的一门编程语言,学习Python语言不仅有着非常大的发展空间,还可以有一个非常好的工作,下面小编就来给大家分享一篇Python培训教程之Python基础知识 ...

  9. python 多线程编程之_thread模块

    python 多线程编程之_thread模块 参考书籍:python核心编程 _thread模块除了可以派生线程外,还提供了基本的同步数据结构,又称为锁对象(lock object,也叫原语锁.简单锁 ...

最新文章

  1. 非Java程序员转行Java-day01-入门基础
  2. 大连关于领取软考2021年上半年合格证书的通知
  3. 【回文数】算法优化笔记
  4. Apollo自动驾驶入门课程第⑦讲 — 规划(上)
  5. VS2013编译64位boost流程及若干问题
  6. linux kong_当Linux是善良的面Kong
  7. JAVA 创建学生类
  8. 语料库python_NLPPython笔记——语料库
  9. 德勤咨询:阿里云是跨国企业上云优选
  10. 【软考】2020年下半年计算机技术与软件资格考试划水贴
  11. 飞机上一旅客突然收到生日蛋糕,是个小惊喜
  12. 如何写一篇文献计量分析论文---citespace+vosviewer+文献计量在线分析平台
  13. js内置对象方法笔记
  14. 【CSDN软件工程师能力认证学习精选】十分详细的React入门实例
  15. Digital Booklet - Taylor Swift Karao-pdf
  16. linux挂载NTFS格式硬盘
  17. 如何用python计算年龄_用Python写一个能算出自己年龄的小程序
  18. 微信平台 签名生成工具
  19. 电视盒子有哪些软件支持电视节目回看?
  20. Python中//符号是什么意思?

热门文章

  1. jxl和poi读取excel出现日期变成数字的问题的查因及解决jxl和poi读取各种日期格式的验证和对比
  2. linux终端录像工具,Linux_Ubuntu安装屏幕录像工具Simple Screen Recorder的方法,  Simple Screen Recorder是一款简 - phpStudy...
  3. 2017最新java学习大全
  4. 咖啡店开在哪里赚钱?
  5. 深圳五险(养老保险、工伤保险、生育保险、失业保险,医疗保险)的那些事儿~2020年梳理
  6. 截取string的几种方式
  7. 浅析微信支付:5统一下单接口
  8. 配置Linux虚拟机编译环境
  9. 一个简单打字游戏的设计(C语言)
  10. 酷毙了,Python“元宇宙”实现赛博朋克数据可视化