Asyncio gather方法会执行所有的协程任务,并返回它们的结果列表,但是如果协程中没有返回任何结果,则该列表中相应的位置将是None。如果所有协程都没有返回结果,那么gather方法的返回值也将是None。
如果要避免返回None,可以使用asyncio.ensure_future()方法将协程转换为任务,然后使用await asyncio.gather(tasks)的方式来获取它们的结果。
以下是示例代码:
import asyncio
async def coro():
print("Coroutine.")
return "result"
async def main():
tasks = []
tasks.append(asyncio.ensure_future(coro()))
tasks.append(asyncio.ensure_future(coro()))
results = await asyncio.gather(*tasks)
print(results)
asyncio.run(main())
运行结果:
Coroutine.
Coroutine.
['result', 'result']