python 协程之yield


协程,又叫微线程或者纤程。它是比线程更为细小的线程,微线程的名字由此得来。只支持python 3.4以上的版本,不过建议使用python 3.6版本.

优点:

  • 使用高并发、高扩展、低性能的;一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理

  • 无需上下文的切换开销

缺点:

  • 无法利用计算机多核优势

一般情况下,实现协程并发有三种方式

  • yield(简单协程)

  • asyncio(Python自带)

  • greenlet(第三方库)

  • gevent(第三方库)

学过Python基础的朋友们都知道,函数的返回值有两种方式,一种是最常用的return,还有一种是yeild,虽然它是起到挂起的作用,但是依旧能返回值。

 

基本思路就是创建生成器然后获取生成器并执行:

这就是最为简单的协程的实现,异步IO的实现

import time
def func1():
    while True:
        print('正在执行:func1')
        yield
        time.sleep(2)
def func2():
    while True:
        print('正在执行:func2')
        yield
        time.sleep(2)
if __name__ == '__main__':
    for i in range(5):
        next(func1())
        next(func2())

 

 

 

在不开启线程的基础上,实现多个任务,协程是一个特殊的生成器

实现过程:

  • func1 生成器

  • func2 生成器

  • 获取生成器

  • 运行生成器

带yield的函数是一个生成器,而不是一个函数了,生成器有一个next函数,next相当于'下一步',这一次的next开始的地方就是接着上一次next停止的地方执行,所以调用next的时候,并不会从fun函数执行,只是接着上一次停止的地方开始。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM