使用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()
最新文章
- Facebook周末超越谷歌成巴西访问量最大网站
- Windows位图文件格式[转]
- AQS 详解
- java jkd8与jdk17的安装与对它们进行切换
- 【搜索】【Meet in the middle】世界冰球锦标赛Ice Hockey World Championship
- CStdioFile 追加文件内容
- filter
- Azure Messaging
- chromium 37 chrome Native messaging 本地消息机制
- LVS均衡负载(一) LVS详解
- 美团招聘计算机视觉算法岗实习生
- Android 强制应用全局横屏或竖屏
- Python全局变量和局部变量(超详细,纯干货,保姆级教学)
- 伪装物体检测
- Redis 官方可视化工具,功能真的强大
- 推荐给初学者:如何学好C语言?
- 自己写个双色球