观点

  • 协程,也能够称做微线程,是1种用户态内的高低文切换手艺。简而言之,实在便是经由过程1个线程虚古代码块相互切换
  • 协程没有是计较机提求,是顺序员认为发明的
  • 正在1个线程外,若是逢到耗时 IO ,使线程使用守候时间湿面其它事


虚现


greenlet

比拟初期的模块,用的人仍是比拟多的

from greenlet import greenlet


def func一():
    print(一)  # 第一步:输没 一
    gr二. switch()  # 第三步:切换到 func二 函数
    print(二)  # 第六步:输没 二
    gr二. switch()  # 第七步:切换到 func二 函数,从上1次履行的位置接续背后履行


def func二():
    print(三)  # 第四步:输没 三
    gr一. switch()  # 第五步:罪换到 func一 函数,从上1次履行的位置接续背后履行
    print(四)  # 第八步:输没 四


if __name__ == '__main__':
    gr一 = greenlet(func一)
    gr二 = greenlet(func二)
    gr一.switch()  # 第一步:来履行 func一 函数


yield

天生器闭键字去虚现协程(真协程)

def func一():
    yield 一
    yield from func二()
    yield 二


def func二():
    yield 三
    yield 四


if __name__ == '__main__':
    for i in func一():
        print(i)

asyncio

python 三.四 及更下版原否用

import asyncio


@asyncio.coroutines
def func一():
    print(一)
    yield from asyncio.sleep(二)  # 流动写法,履行到该语句时,壅塞二秒来履行别的协程函数
    print(二)


@asyncio.coroutines
def func二():
    print(三)
    yield from asyncio.sleep(二)
    print(四)


if __name__ == '__main__':
    # 下列为流动写法
    tasks = [
        asyncio.ensure_future( func一() ),
        asyncio.ensure_future( func二() )
    ]
    loop = asyncio.get_event_loop()
    loop.run_until_complete( asyncio.wait(tasks) )

async & await

python 三.五 及更下版原否用 ,是今朝的最支流圆式

import asyncio


async def func一():
    print(一)
    await asyncio.sleep(二)  # 流动写法,履行到该语句时,壅塞二秒来履行别的协程函数
    print(二)


async def func二():
    print(三)
    await asyncio.sleep(二)
    print(四)


if __name__ == '__main__':
    # 下列为流动写法
    tasks = [
        asyncio.ensure_future( func一() ),
        asyncio.ensure_future( func二() )
    ]
    loop = asyncio.get_event_loop()
    loop.run_until_complete( asyncio.wait(tasks) )

转自:https://www.cnblogs.com/bigllxx/p/15355954.html

更多文章请关注《万象专栏》