pythonawait教程_在python里使用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()

输出结果如下:

in outer

waiting for result1

in phase1

waiting for result2

in phase2

return value: ('result1', 'result2 derived from result1')

await关键字添加了一个新的协程到循环里,而不需要明确地添加协程到这个事件循环里。

补充知识:python里使用Condition对象来唤醒指定数量的协程

在asyncio库里,定义Condition对象,它的行为与事件Event有点像,区别是事件是通知所有对象,Condition对象可以指定一定数量的协程被通知,它是通过函数notify()来实现的,如果参数里放2,就是通知两个协程,例子如下:

import asyncio

async def consumer(condition, n):

with await condition:

print('consumer {} is waiting'.format(n))

await condition.wait()

print('consumer {} triggered'.format(n))

print('ending consumer {}'.format(n))

async def manipulate_condition(condition):

print('starting manipulate_condition')

# pause to let consumers start

await asyncio.sleep(0.1)

for i in range(1, 3):

with await condition:

print('notifying {} consumers'.format(i))

condition.notify(n=i)

await asyncio.sleep(0.1)

with await condition:

print('notifying remaining consumers')

condition.notify_all()

print('ending manipulate_condition')

async def main(loop):

# Create a condition

condition = asyncio.Condition()

# Set up tasks watching the condition

consumers = [

consumer(condition, i)

for i in range(5)

]

# Schedule a task to manipulate the condition variable

loop.create_task(manipulate_condition(condition))

# Wait for the consumers to be done

await asyncio.wait(consumers)

event_loop = asyncio.get_event_loop()

try:

result = event_loop.run_until_complete(main(event_loop))

finally:

event_loop.close()

结果输出如下:

starting manipulate_condition

consumer 2 is waiting

consumer 3 is waiting

consumer 4 is waiting

consumer 1 is waiting

consumer 0 is waiting

notifying 1 consumers

consumer 2 triggered

ending consumer 2

notifying 2 consumers

consumer 3 triggered

ending consumer 3

consumer 4 triggered

ending consumer 4

notifying remaining consumers

ending manipulate_condition

consumer 1 triggered

ending consumer 1

consumer 0 triggered

ending consumer 0

以上这篇在python里使用await关键字来等另外一个协程的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持python博客。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值