如何理解协程中的等待?

问题描述 投票:0回答:1

以下示例显示我们可以先运行阶段1,然后运行阶段2。但是,我们希望协程能够同时做两件事,而不是一遍又一遍。我知道是否使用asyncio.get_event_loop.create_task可以实现我想要的功能,但是为什么要使用await?我认为使用await和仅使用普通函数没有区别。

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()
python asynchronous python-asyncio
1个回答
0
投票

您可以在等待某些事件发生时暂停协程的执行时使用await,例如正在检索的文件,Web请求或数据库请求。等待表达式允许事件循环让另一个协程/任务使用该处理时间。

© www.soinside.com 2019 - 2024. All rights reserved.