博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python程序中的协程操作-greenlet模块
阅读量:4616 次
发布时间:2019-06-09

本文共 1205 字,大约阅读时间需要 4 分钟。

目录

一、安装模块

安装:pip3 install greenlet

二、greenlet实现状态切换

from greenlet import greenletdef eat(name):    print('%s eat 1' %name)    g2.switch('nick')    print('%s eat 2' %name)    g2.switch()def play(name):    print('%s play 1' %name)    g1.switch()    print('%s play 2' %name)g1=greenlet(eat)g2=greenlet(play)g1.switch('nick')#可以在第一次switch时传入参数,以后都不需要

单纯的切换(在没有io的情况下或者没有重复开辟内存空间的操作),反而会降低程序的执行速度。

三、效率对比

#顺序执行import timedef f1():    res=1    for i in range(100000000):        res+=idef f2():    res=1    for i in range(100000000):        res*=istart=time.time()f1()f2()stop=time.time()print('run time is %s' %(stop-start)) #10.985628366470337#切换from greenlet import greenletimport timedef f1():    res=1    for i in range(100000000):        res+=i        g2.switch()def f2():    res=1    for i in range(100000000):        res*=i        g1.switch()start=time.time()g1=greenlet(f1)g2=greenlet(f2)g1.switch()stop=time.time()print('run time is %s' %(stop-start)) # 52.763017892837524

greenlet只是提供了一种比generator更加便捷的切换方式,当切到一个任务执行时如果遇到io,那就原地阻塞,仍然是没有解决遇到IO自动切换来提升效率的问题。

单线程里的这20个任务的代码通常会既有计算操作又有阻塞操作,我们完全可以在执行任务1时遇到阻塞,就利用阻塞的时间去执行任务2...如此,才能提高效率,这就用到了Gevent模块。

转载于:https://www.cnblogs.com/nickchen121/p/11142499.html

你可能感兴趣的文章
Hive查询
查看>>
解决 vs2010 联接sql 2005 时 报错未能加载文件或程序集“Microsoft.SqlServer.Management.Sdk.Sfc...
查看>>
函数初识
查看>>
Java时间日期格式转换Date转String和String转Date
查看>>
Linux简介
查看>>
django查询操作
查看>>
易语言启动窗口上的"关闭"按钮被按下,应该怎样写事件?
查看>>
【做题】CFedu41G. Partitions——推式子
查看>>
jdk环境变量配置
查看>>
C语言回顾-内存管理和指针函数
查看>>
三、freemarker数据、模版指令
查看>>
wm_concat函数的排序问题
查看>>
Webstorm配置CSS/SCSS自动补全兼容前缀autoprefixer插件
查看>>
音频系统应用中的“POP”噪声以其常用解决方法
查看>>
在chrome上隐藏video的option按钮
查看>>
设计模式之装饰者模式Decorator Pattern
查看>>
1、事件、函数、变量、判断
查看>>
[转载]Matlab绘图-很详细,很全面(包含各种标示符的输入方法)
查看>>
《算法导论》第二章----插入排序(伪代码实现、课后习题(递归版本、二分查找策略版本))...
查看>>
p1001 --- 第K极值
查看>>