# 在不开辟线程的基础上,执行多任务(多个任务交替执行的),又称为微线程
# 一般来说,协程有三种方式,待我一一道来
1. 首先是yield关键字,在def里面看到yield关键字可以理解是协程
# 整体代码较简单,只需导入time包来进行耗时操作,剩下的靠代码来操作!
——在每个def里的最后加入yield,然后在程序入口创建函数变量并且next()来执行(利用死循环)
——结果是两个函数交替执行,完成多任务
2. 再一个就是greenlet,事先检查是否预装该包(在命令行输入pip3 list 查看)
# 这个就有点不一样;
1. 导入greenlet和time
2. 创建任务(先不管g1.switch和g2.switch)
3. 程序入口,创建协程指定对应的任务greenlet.greenlet()
先切换到第一个任务g1.switch(),然后回到函数在第一个任务下切换到第二个任务g2.switch()
紧接着在第二个函数下又切换到第一个任务!
4. 这样就达到了多任务交替执行的结果
# greenlet框架封装的是yield,greenlet能够让程序员很直观的查看协程的切换
3. 这一种也是用的最多的方式,利用gevent
# gevent封装是greenlet,可以根据耗时操作自动完成协程之间的切换执行
# 这种方式可以说是最清新的(个人觉得)(笑脸)
# 和前面两种不同的是,只要创建多个任务,然后就交给程序入口了,后期好维护!
# 说重点,程序入口创建协程指定的任务gevent.spawn()
——然后就不用管了,会自动执行协程,嘿嘿嘿!
#那么问题就来了,运行结果是没有任何数据输出;
1. 那是因为主线程没有等待协程执行完就退出了,所以每个任务加入join()等待
2. 还有就是耗时操作,gevent只认自己的耗时gevrnt.sleep();
要想识别time,前期导入monkey模块(在gevent里),然后打个补丁monkey.patch_all()就好了!
@总结;方式多,但都很简易,加油!
————来自江西九江的一纸黑字~~