协程 3.gevent
2021/12/15 6:16:49
本文主要是介绍协程 3.gevent,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
gevent
gevent gevent是python中另一个实现协程的第三方库,greenlet需要指定切换任务,而gevent能够自动调度协程 gevent能够自动识别程序中的耗时操作,遇到耗时操作时自动切换到其他的任务 由于IO操作非常耗时,程序经常处于等待状态,使用gevent实现自动切换协程能保证总有greenlet在运行,而不是等待IO gevent只有在遇到阻塞的时候才会执行协程 默认情况下time.sleep()不能被gevent识别为耗时操作 1.把time.sleep()替换为gevent.sleep() 2.添加补丁使gevent可以识别time.sleep() monkey补丁的作用 1.在运行时替换方法、属性等 2.在不修改第三方代码的情况下增加原来不支持的功能 3.在运行时为内存中的对象增加patch,而不是在磁盘的源代码中增加 gevent gevent.spawn(func,value1,value2,......) 功能:创建gevent对象 参数: target:协程执行的函数名 gevent.getcurrent() 功能:获取当前协程对象 gevent.joinall([args]) 功能:批量为协程执行join() 参数:需要join()的gevent组成的list from gevent import monkey monkey.patch_all() 功能:破解所有,使gevent可以识别time.sleep() obj.sleep(time) 功能:休眠,是gevent可以识别的time.sleep() obj.join() 功能:造成阻塞,使主线程等待协程执行完成再结束
from gevent import monkey monkey.patch_all() import time import gevent # 创建work1 def work1(n): while True: print('work1----------', n ,gevent.getcurrent()) n += 2 # 替换为gevent.sleep() # time.sleep(0.5) gevent.sleep(0.5) print('run1') # 创建work2 def work2(m): while True: print('----------work2', m ,gevent.getcurrent()) m += 2 # 添加补丁后gevent可以识别time.sleep() time.sleep(0.5) # gevent.sleep(0.5) print('run2') if __name__ == '__main__': # 创建gevent对象 g1 = gevent.spawn(work1,1) g2 = gevent.spawn(work2,2) # 造成阻塞,程序阻塞时gevent自动切换到协程中执行 g1.join() # g2.join() work1---------- 1 <Greenlet at 0x97e5349168: work1(1)> ----------work2 2 <Greenlet at 0x97e53495e8: work2(2)> run1 work1---------- 3 <Greenlet at 0x97e5349168: work1(1)> run2 ----------work2 4 <Greenlet at 0x97e53495e8: work2(2)> run1 work1---------- 5 <Greenlet at 0x97e5349168: work1(1)> run2 ----------work2 6 <Greenlet at 0x97e53495e8: work2(2)> run1 work1---------- 7 <Greenlet at 0x97e5349168: work1(1)> run2
这篇关于协程 3.gevent的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)