简述 gevent模块的作用和应用场景。

当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,

再在适当的时候切换回来继续执行。由于IO操作非常耗时,经常使程序处于等待状态,

有了gevent为我们自动切换协程,就保证总有greenlet在运行,而不是等待IO。
由于切换是在IO操作时自动完成,所以gevent需要修改Python自带的一些标准库,

这一过程在启动时通过monkey patch完成:

原文地址:https://www.cnblogs.com/Rivend/p/12078999.html

时间: 2024-11-02 20:02:10

简述 gevent模块的作用和应用场景。的相关文章

并发编程 - 协程 - 1.协程概念/2.greenlet模块/3.gevent模块/4.gevent实现并发的套接字通信

1.协程并发:切+保存状态单线程下实现并发:协程 切+ 保存状态 yield 遇到io切,提高效率 遇到计算切,并没有提高效率 检测单线程下 IO行为 io阻塞 切 相当于骗操作系统 一直处于计算协程:...单线程下实现并发:根本目标:遇到IO就切,一个线程的整体IO降下来程序用的cpu 时间长,就叫执行效率高效率最高:多个进程 (多个cpu) 每个进程开多个线程 每个线程用到协程 (IO就切)总结协程特点: 1 #并发执行 2 import time 3 4 def producer(): 5

python 并发编程 协程 gevent模块

一 gevent模块 gevent应用场景: 单线程下,多个任务,io密集型程序 安装 pip3 install gevent Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程. Greenlet全部运行在主程序操作系统进程的内部,但它们被协作式地调度. gevent可以检测io,实现遇到io自动切换另外一个任务 #用法 g1=gevent.spawn(func,1,

简述Python模块和包

我们常常会使用别人写的包,假如我们使用的是Python3.4版本,安装在windows的C盘根目录下,那么外部的包一般放在:C:\Python34\Lib\sit-packages下,此目录下有以.py单独存在的文件,也有以文件夹存在的包,下面我们简单说一下Python中的模块和包,看完之后,也许会对这个目录看的更清楚一些. 一.模块 我们编写文件:a.py,放在C:\Python34\Lib\sit-packages下,里面写上一句代码为: print('this is a') 之后我们就可以

简述BASE64编码的作用以及C#中对其的支持

分析问题 和传统的编码不同,BASE64编码的设计致力于混淆那些8位字节的数据流.在网络传输.邮件等系统中,BASE64的编码方式被广泛的应用.BASE64不属于机密机制,但它确实把明码编程了一种很难识别的形式. 注意 BASE64的算法十分简单,BASE64把所有的位分开,并且重新组合成字节,新的字节只包含6位,最后再在每个字节前添加两个0,组成新的字节数组.例如一个字节数组包含3个字节,BASE64编码时将把其分配到4个新的字节中(3*8/6=4),其中每个字节只填充低6位,最后把高2位置0

17、第七周-网络编程 - 协程概念介绍、协程gevent模块并发爬网页

协程,又称微线程,纤程.什么是线程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈.因此:协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开时所处逻辑流的位置. 协程的好处: 无需线程上下文切换的开销 无需原子操作锁定及同步的开销(注解:"原子操作(atomic operation)是不需要synchr

(并发编程)进程池线程池--提交任务的2种方式、协程--yield greenlet,gevent模块

一:进程池与线程池(同步,异步+回调函数)先造个池子,然后放任务为什么要用"池":池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务池子内什么时候装进程:并发的任务属于计算密集型池子内什么时候装线程:并发的任务属于IO密集型 #提交任务的两种方式:    # 同步调用:提交完一个任务之后,就在原地等待,等待任务完完整整地运行完毕拿到结果后,再执行下一行代码,会导致任务是串行执行的    # 异步调用:提交完一个任务之后,不在原地等待,结果???,而是

Python入门学习-DAY37-进程池与线程池、协程、gevent模块

一.进程池与线程池 基本使用: 进程池和线程池操作一样 提交任务的两种方式: 同步调用:提交完一个任务之后,就在原地等待,等待任务完完整整地运行完毕拿到结果后,再执行下一行代码,会导致任务是串行执行的 异步调用:提交完一个任务之后,不在原地等待,结果???,而是直接执行下一行代码,会导致任务是并发执行的 同步调用 from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor import time,random,os

python全栈脱产第37天------进程池与线程池、协程、gevent模块、单线程下实现并发的套接字通信

一.进程池与线程池 调用concurrent.futures下的ThreadPoolExecutor,ProcessPoolExecutor来实现 提交任务有两种方式:同步调用:提交完一个任务之后,就在原地等待,等待任务完完整整地运行完毕拿到结果后,在执行下一段代码,是串行的 异步调用:提交完一个任务之后,不在原地等待,直接运行下一段代码,任务是并发的 from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutorimp

线程池+协程+gevent模块

提交任务的两种方式: 同步调用:提交完一个任务之后,就在原地等待,等待任务完完整整地运行完毕拿到结果后,再执行下一行代码,会导致任务是串行执行的 异步调用:提交完一个任务之后,不在原地等待,而是直接执行下一行代码,会导致任务是并发执行的 p.shutdown(wait=True)关闭进程池的入口,并且在原地等待进程池内所有任务运行完毕 异步调用:提交完一个任务之后,不在原地等待,而是直接执行下一行代码,会导致任务是并发执行的,结果:futrue对象会在任务运行完毕后自动传给回调函数 在线程下实现