第十章:使用进程、线程和协程提供并发性-asyncio:异步I/O、事件循环和并发工具-利用协程合作完成多任务-串链协程

10.5.2.3 串链协程

一个协程可以启动另一个协程并等待结果,从而可以更容易地将一个任务分解为可重用的部分。下面的例子有两个阶段,它们必须按顺序执行,不过可以与其他操作并发运行。

import asyncio

async def outer():
    print('in outer')
    print('waiting for result1')
    result1 = await phase1()
    print('waiting for result2')
    result2 = await phase2(result1)
    return (result1,result2)


async def phase1():
    print('in phase1')
    return 'result1'


async def phase2(arg):
    print('in phase2')
    return 'result2 derived from {}'.format(arg)

event_loop = asyncio.get_event_loop()
try:
    return_value = event_loop.run_until_complete(outer())
    print('return value: {!r}'.format(return_value))
finally:
    event_loop.close()

这里使用了await关键字而不是向循环增加新的协程。因为控制流已经在循环管理的一个协程中,所以没有必要告诉循环管理这些新协程。
运行结果:
在这里插入图片描述

你可能感兴趣的:(Python标准库)