协程

一. 协程

"""""
子程序/函数:
在所有语言中都是层级调用 比如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

 

posted @ 2019-01-14 17:04  Loversuperme  阅读(97)  评论(0编辑  收藏  举报