python多任务之协程的使用详解

时间:2021-05-23

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多任务之协程的使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章