python多任务之协程的使用详解
1|0使用yield完成多任务
import timedef test1(): while True: print("--1--") time.sleep(0.5) yield Nonedef test2(): while True: print("--2--") time.sleep(0.5) yield Noneif __name__ == "__main__": t1 = test1() t2 = test2() while True: next(t1) next(t2)
2|0使用greenlet完成多任务
如果没有安装,则pip install greenlet
from greenlet import greenletimport 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()
3|0使用gevent完成多任务
首先使用pip install gevent
进行安装
gevent是对greenlet的再次封装,使用起来更加简便,当有耗时操作时会自动切换到其他协程。gevent封装了常用的耗时操作,如thread、socket、time、multiprocessing等模块。
import geventimport timefrom gevent import monkey# 打补丁,不需要改原来的耗时操作,否则是要使用gevent提供的模块monkey.patch_all()def f(n): for i in range(n): print(gevent.getcurrent(), i) # 使用gevent提供的耗时模块 # gevent.sleep(0.5) time.sleep(0.5)g1 = gevent.spawn(f, 5)g2 = gevent.spawn(f, 5)g3 = gevent.spawn(f, 5)# g1.join()# g2.join()# g3.join()# 一次性添加全部的任务gevent.joinall([g1,g2,g3])
总结
以上所述是小编给大家介绍的python多任务之协程的使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对亿速云网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。