在这里使用 ensure_future()函数可以把一个协程封装成一个任务,然后这个任务就可以传送给别的代码,不过要注意的是这个函数不会开始执行协程,需要使用关键await才会开始执行:
import asyncio
async def wrapped():
print('wrapped')
return 'result'
async def inner(task):
print('inner: starting')
print('inner: waiting for {!r}'.format(task))
result = await task
print('inner: task returned {!r}'.format(result))
async def starter():
print('starter: creating task')
task = asyncio.ensure_future(wrapped())
print('starter: waiting for inner')
await inner(task)
print('starter: inner returned')
event_loop = asyncio.get_event_loop()
try:
print('entering event loop')
result = event_loop.run_until_complete(starter())
finally:
event_loop.close()
输出结果如下:
entering event loop
starter: creating task
starter: waiting for inner
inner: starting
inner: waiting for <Task pending coro=<wrapped() running at D:/work/csdn/python_Game1/example/asyncio_ensure_future.py:4>>
wrapped
inner: task returned 'result'
starter: inner returned