介绍
这篇文章主要为大家展示了python如何使用等待关键字来等另外一个协程,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。
一个协程里可以启动另外一个协程,并等待它完成返回结果,采用等待关键字,
<强>例子如下:强>
进口asyncio 异步def外(): print(& # 39;外# 39;) 打印(& # 39;等待result1& # 39;) result1=等待phase1编写此表达式() 打印(& # 39;等待result2& # 39;) result2=等待phase2 (result1)编写此表达式 返回(result1,编写此表达式result2) 异步def phase1 (): print (& # 39; phase1& # 39;) 返回& # 39;result1& # 39; 异步def phase2 (arg): print (& # 39; phase2& # 39;) 返回& # 39;result2源自{}& # 39;.format (arg) event_loop=asyncio.get_event_loop () 试一试: return_value=https://www.yisu.com/zixun/event_loop.run_until_complete(外()) print(返回值:{! r}’.format (return_value)) 最后: event_loop.close () 输出结果如下: 在外层 等待result1 在phase1 等待result2 在phase2 返回值:(result1”编写此表达式,result2源自result1”编写此表达式)
等待关键字添加了一个新的协程到循环里,而不需要明确地添加协程到这个事件循环里。
<强> python里使用条件对象来唤醒指定数量的协程强>
在asyncio库里,定义条件对象,它的行为与事件事件有点像,区别是事件是通知所有对象,条件对象可以指定一定数量的协程被通知,它是通过函数通知()来实现的,如果参数里放2,就是通知两个协程,例子如下:
进口asyncio 异步def消费(条件下,n): 与等待条件: 打印(& # 39;消费者{}等待# 39;.format (n)) 等待condition.wait () 打印(& # 39;消费者{}触发# 39;.format (n)) 打印(& # 39;结束消费者{}& # 39;.format (n)) 异步def manipulate_condition(条件): print (& # 39; manipulate_condition& # 39;开始) #暂停让消费者开始 等待asyncio.sleep (0.1) 我的范围(1、3): 与等待条件: 打印(& # 39;通知{}消费者# 39;.format(我)) condition.notify (n=我) 等待asyncio.sleep (0.1) 与等待条件: 打印(& # 39;剩余通知消费者,) condition.notify_all () 打印(& # 39;manipulate_condition& # 39;结束) 异步def主要(循环): #创建一个条件 条件=asyncio.Condition () #设置任务看条件 消费者=[ 消费者(条件,我) 因为我在范围(5) ] #计划任务来操纵条件变量 loop.create_task (manipulate_condition(条件)) #等待消费者要做 等待asyncio.wait(消费者) event_loop=asyncio.get_event_loop () 试一试: 结果=event_loop.run_until_complete(主要(event_loop)) 最后: event_loop.close ()
结果输出如下:
开始manipulate_condition 消费者2是等待 消费者3是等待 消费者4是等待 消费1是等待 消费者0是等待 通知1消费者 消费者2触发 结束消费者2 通知2消费者 引发消费者3 结束消费者3 消费者4触发 结束消费者4 通知剩余的消费者 结束manipulate_condition 消费1触发 结束消费1 消费者0触发 结束消费者0
以上就是关于python如何使用等待关键字来等另外一个协程的内容,如果你们有学习到知识或者技能,可以把它分享出去让更多的人看的到。