协程
一. 协程
"""""
子程序/函数:
在所有语言中都是层级调用 比如a调用b
在b执行的过程中又可以调用c c执行完毕返回 b执行完毕返回 最后时a执行完毕
是通过栈实现的 一个线程就是执行一个子程序 子程序 调用总是一个入口 一次返回
调用的顺序是明确的
协程:
看上去也是子程序 但是在执行过程中 在子程序的内部可以中断
然后转而执行别的子程序不是函数调用 有点类似cpu中断
"""
1 . 简单的子程序掉用
# 简单的子程序掉用 def C(): print("C---start") print("C---end") def B(): print("B---start") C() print("B---end") def A(): print("A---start") B() print("A---end") A() # A---start # B---start # C---start # C---end # B---end # A---end
2. 协程原理
def A(): print(1) print(2) print(3) def B(): print("x") print("y") print("z") """执行结果: 但是A中是没有B调用 看起来A B执行过程中有点像线程 但是协程的特点在于是一个线程执行 与线程的相比 协程的执行效率极高 因为只有一个线程 也不存在同时写变量的冲突 1 2 x y z 3 """
3 . 协程原理
# 在python中是通过 generator 实现的 # # def run(): print(1) yield 10 print(2) yield 20 print(3) yield 30 # 协程 的最简单风格 控制函数的阶段执行 # 节约线程和进程的切换 返回一个生成器 # m=run() print(next(m)) # 1 # 10
4 . 协程数据传输
# 在python中是通过 generator 实现的 # # 数据传输 需要一个空变量 def run(): data="" r=yield data print(1) yield 10 print(2) yield 20 print(3) yield 30 m=run() print(next(m)) # 1 # 10