进程线程协程(协程篇)

Posted zpstu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程线程协程(协程篇)相关的知识,希望对你有一定的参考价值。

什么是协程?

  首先,先说一个前提:子程序/函数:在所有语言中都是层级调用的,比如A调用B。在B执行过程中又可以调用C,C执行完毕返回,B执行完毕返回,最后是A执行完毕返回。是通过栈实现的,一个线程就是执行一个子程序,子程序调用总是一个入口,一次返回,调用的顺序是明确的。

  然后就是协程的概念:

  看上去也是子程序,但执行过程中,在子程序的内部可终端,然后转而执行别的子程序,不是函数调用

# 协程
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() # 协程的特点就是一个只有一个线程在执行,协程的执行效率极高 # 因为只有一个线程,也不存在同时写变量的冲突,在协程中共享资源不加锁,只需要判断状态
# 协程原理
# python 对协程的支持是通过generator实现的
def run():
    print(1)
    yield 10
    print(2)
    yield 20
    print(3)
    yield 30
# 协程的最简单风格,控制函数的阶段执行,节约协程或者进程的切换
# 返回只是一个生成器
m = run()
print(next(m))
print(next(m))
print(next(m))
# 数据传输
def run():
    # 空变量,储存的作用data始终为空
    data = ‘‘   # 第一次执行的
    r = yield data   # 出去r=,后面也是第一次执行的;第一次执行,传递进来个空值,返回为空
    # r = a
    print(1, r, data) # 第二次传递进来的a
    r = yield data     # 第二次返回一个空
    # r = b
    print(2, r, data)
    r = yield data
    # r = c
    print(3, r, data)
    r = yield data
m = run()
print(m.send(None))
print(m.send(a))
print(m.send(b))
print(m.send(c))
# 生产者与消费者
def product(a):
    a.send(None)
    for i in range(5):
        print(生产者与消费者)
        r = a.send(str(i))
        print(消费者消费了数据{}.format(r))
    a.close()
def customer():
    data = ‘‘
    while True::
        n = yield data
        if not n:
            return
        print(消费者消费了{}。format(n))
        data = 200
c = customer()
product(c)

 


以上是关于进程线程协程(协程篇)的主要内容,如果未能解决你的问题,请参考以下文章

进程线程协程(协程篇)

Python 进程线程协程篇

Python进程线程协程篇

Python之进程线程协程篇

进程线程协程篇

python 自动化之路 day 09 进程线程协程篇