python 协程

Posted 平常心u

tags:

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

协程,又称微线程,纤程。英文名Coroutine。一句话说明什么是线程:协程是一种用户态的轻量级线程

协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。

最大的优势就是协程极高的执行效率。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。

第二大优势就是不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。

因为协程是一个线程执行,那怎么利用多核CPU呢?最简单的方法是多进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。

import queue,time
def consumer(name):
    print(start)
    while True:
        new_baozi=yield     #生成器遇到next 先返回yield后的值,
                            # 如果遇到send(值)把此值赋给new_baozi,第一次若遇到send(值),值只能是None
        print(%s吃%d号包子 %(name,new_baozi))
def producer():
    next(con)
    next(con2)
    n=0
    while n<5:
        n+=1
        print(生产%d号包子 % n)
        con.send(n)
        con2.send(n)

if __name__==__main__:
    con=consumer(c1)  #创建生成器对象
    con2=consumer(c2)
    p=producer()

符合什么条件就能称之为协程:

  1. 必须在只有一个单线程里实现并发
  2. 修改共享数据不需加锁
  3. 用户程序里自己保存多个控制流的上下文栈
  4. 一个协程遇到IO操作自动切换到其它协程

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

Python中的协程与asyncio原理

Python中的协程与asyncio原理

Python中的协程与asyncio原理

python3之协程

python协程

python协程