使用greenlet,gevent来完成多任务
使用greenlet,gevent来完成多任务
为了更好的使用协程来完成多任务,python中的greeblet模块对其进行了封装。其中greelet模块的greelet类对yield进行了封装。
from greenlet import greenlet
import timedef test1():while True:print('---A----')gr2.switch()time.sleep(0.5)def test2():while True:print('----B----')gr1.switch()time.sleep(0.5)
gr1= greenlet(test1)
gr2 = greenlet(test2)gr1.switch()
gevent
Python通过yield提供了对协程的基本支持,但是不完全。而第三方的gevent为Python提供了比较完善的协程支持。
gevent是第三方库,通过greenlet实现协程,其基本思想是:当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行。由于IO操作非常耗时,经常使程序处于等待状态,有了gevent为我们自动切换协程,就保证总有greenlet在运行,而不是等待IO。
import geventdef f1(n):for i in range(n):print(gevent.getcurrent(),i)gevent.sleep(0.5)def f2(n):for i in range(n):print(gevent.getcurrent(),i)gevent.sleep(0.5)
def f3(n):for i in range(n):print(gevent.getcurrent(),i)#gevent.sleep(0.5)g1 = gevent.spawn(f1,5)
g2 = gevent.spawn(f2,5)
g3 = gevent.spawn(f3,5)g1.join()
g2.join()
g3.join()
最新文章
- 外媒:谷歌将推Google Play中国定制版
- KPM算法详解(Next数组)
- filter过滤器设置URL例外
- 全局最优解
- 创建Firebase项目并接入Firebase推送: Firebase Cloud Messaging (FCM)
- 数据结构
- 不用的MacBook这样处理比较好
- 11221
- CentOS 7 安装教程
- 【分布式微服务】消息中心初步搭建
- 消息中心设计模式UML图
- deflate树与deflate编码
- 纯前端实现登记照压缩宽高体积大小和换装功能
- 云端漫步
- 外贸业务员该如何拓客?
- Windows下安装Redis及可视化工具
- 超好用的Redis管理及监控工具
- 初学者关于c语言中函数局部变量空间释放的理解
- 面试:Jetpack相关
- JScript.NET或者JScript是什么?