萌新学习笔记之协程
# 协程是单一线程的多任务切换,占用资源少,无需互斥# 适用于高并发任务处理,原理类似于yield
# 缺点是单线程,不能多核,不能被阻塞
# 标准库协程模块asyncio生态不好,用的人并不多
# 第三方协程模块有greenlet和Gevent
程序代码:
# 协程模块gevent是greenlet的升级版 # gevent只有要遇到本身供的阻塞函数时,才会跳转协程 # 如:gevent.sleep(2)或gevent.joinall([fun1,fun2,...]) import gevent def fun1(arg1): print('fun1开始') print('参数:',arg1) gevent.sleep(2) print('fun1结束') def fun2(arg1,arg2): print('fun2开始') print('参数1:',arg1) gevent.sleep(3) print('参数2:',arg2) print('fun2结束') gv1 = gevent.spawn(fun1,1) gv2 = gevent.spawn(fun2,1,2) gevent.joinall([gv1,gv2])
运行结果:
fun1开始
参数: 1
fun2开始
参数1: 1
fun1结束
参数2: 2
fun2结束