美文网首页
python 协程

python 协程

作者: 足__迹 | 来源:发表于2019-08-29 19:39 被阅读0次

什么是协程

  • 协程是python种一种实现多任务的方式,他是一种比线程更加小的单元,占用更小的执行单元(资源),为啥说他是一个执行单元,因为他自带CPU上下文,这样在合适gr的时机,可以把一个协程切换到另一个协程,只要在这个过程中保存和恢复cpu上下文那么程序还是可以运行的

  • 通俗的理解: 一个线程中的某个函数,可以在任何地方保存当前函数的一些临时变量,然后切换到另一个函数中运行,并且切换的次数以及社么时候再切换回来是可控的

协程和线程的差异

  • 在实现多任务时,线程会自己欢子一些数据,操作系统切换时需要恢复数据,所以线程恢复比较耗性能
协程底层原理(举例)
'''
1,协程的实现原理,底层通过 yield 实现
'''

def work1(): #工作任务
    for i in range(10):
        print('work1----{}'.format(i))
        yield i

def work2():
    for i in range(10):
        print('work2----{}'.format(i))
        yield i

def work3():
    for i in range(10):
        print('work3----{}'.format(i))
        yield i


g1 = work1()
g2 = work2()
g3 = work3()

while True: #循环调用生成器实现任务切换
    try:
        print(next(g1))
        print(next(g2))
        print(next(g3))
    except StopIteration :
        pass
        break

协程 greenlet

python -m pip install greenlet
示例

'''
1,展示greenelent ,不能自动切换需要手动切换
'''
import greenlet

def work1():
    for i in range(10):
          print('work1----{}'.format(i))
          g2.switch()    #切换到g2



def work2():
    for i in range(10):
          print('work2----{}'.format(i))
          g1.switch()  #切换到g1



g1 = greenlet.greenlet(work1)  #返回协程对象
g2 = greenlet.greenlet(work2)

g1.switch()  #启动开关

执行顺序

gevent

  • greenlet 已经实现了协程,但是还是人工切换,gevent 提供了自动切换功能,其原理是执行过程中遇到IO操作,自动切换
'''
协程gevent IO操作会切换
'''
import gevent


def work1():  # 工作任务
    for i in range(10):
        print('work1----{}'.format(i))
        gevent.sleep(0.5)


def work2():
    for i in range(10):
        print('work2----{}'.format(i))
        gevent.sleep(0.5)


g1 = gevent.spawn(work1) #指定工作函数
g2 = gevent.spawn(work2) #指定工作函数
g1.join()    #等待协程执行完成再往下走
g2.join()


相关文章

  • python异步协程(aiohttp,asyncio)

    python异步协程 环境:python3.7.0 协程 协程,英文叫做 Coroutine,又称微线程,纤程,协...

  • asyncio + asyncio 异步编程实例

    协程用法 接下来,我们来了解下协程的实现,从 Python 3.4 开始,Python 中加入了协程的概念,但这个...

  • Python 协程

    仅供学习,转载请注明出处 协程 协程,又称微线程,纤程。英文名Coroutine。 协程是啥 协程是python个...

  • 协程

    1.协程 协程,又称微线程,纤程。英文名Coroutine。 1.1 协程是什么 协程是python个中另外一种实...

  • Python并发编程——协程

    摘要:Python,协程,gevent 协程基本概念 协程,又称微线程,纤程。英文名Coroutine,是Pyth...

  • 协程介绍

    协程 协程,又称微线程,纤程。英文名Coroutine。 1.协程是什么? 协程是python个中另外一种实现多任...

  • 4-7

    协程 协程,又称微线程,纤程。英文名Coroutine。 协程是啥 协程是python个中另外一种实现多任务的方式...

  • 协程

    协程 协程,又称微线程,纤程。英文名Coroutine。 协程是啥 协程是python个中另外一种实现多任务的方式...

  • Python 协程 异步资料记录

    1. Python3.5协程原理 详细说明了Python协程产生的历史. 研究明白之后,写一篇文章,解释协程,并附...

  • 36.Python并发编程之协程

    Python并发编程之协程 协程协程是程序级别的概念,操作系统根本就没有协程的概念!!!协程的本质就是一条线程,可...

网友评论

      本文标题:python 协程

      本文链接:https://www.haomeiwen.com/subject/tzrwectx.html