以下示例显示我们可以先运行阶段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()
您可以在等待某些事件发生时暂停协程的执行时使用await
,例如正在检索的文件,Web请求或数据库请求。等待表达式允许事件循环让另一个协程/任务使用该处理时间。