
麦子学院 2017-09-08 22:33
Python学习之由生成器构成的协程语法详解
回复:0 查看:2705
虽然在python3.5
版本之后增加
async def
和
await
语法,但是之前的
asyncio.coroutine()
生成器的装饰器还是可以使用的,并且使用
yield from
的语法,实际同样的效果,代码如下:
import asyncio
@asyncio.coroutine
def
outer():
print('in outer')
print('waiting for result1')
result1 =
yield
from phase1()
print('waiting for result2')
result2 =
yield
from phase2(result1)
return (result1, result2)
@asyncio.coroutine
def
phase1():
print('in phase1')
return 'result1'
@asyncio.coroutine
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')
可以看到跟前面的例子运行结果是一样的。
来源:
大坡3D
软件开发