python - 关于asyncio模块,如何获取子协程的返回值?
问题描述
协程的当前事件循环已经打开。在协程对象内部,创建一个新的协程对象并将其注册到事件循环中。
问题:如何获取 的返回值sub-coroutine
?
我想得到的返回值func_first
import asyncio
import time
async def func_first(values):
await asyncio.sleep(2)
print('out: func_first')
return values
async def func_second():
s = asyncio.create_task(func_first(100))
await asyncio.sleep(3)
print('out: func_second')
if __name__ == '__main__':
loop = asyncio.get_event_loop()
s = time.time()
loop.run_until_complete(func_second())
print('TIME:', time.time()-s)
解决方案
在您的代码中,只需将 await 添加到您的打印语句中。事实上,它甚至比这更容易:不要为创建任务而烦恼;只需等待函数并直接打印值。此代码显示了这两种方法:
import asyncio
import time
async def func_first(values):
await asyncio.sleep(2)
print('out: func_first')
return values
async def func_second():
s = asyncio.create_task(func_first(100))
await asyncio.sleep(3)
print('out: func_second', await s)
async def func_third():
print('out: func_third', await func_first(101))
if __name__ == '__main__':
loop = asyncio.get_event_loop()
s = time.time()
loop.run_until_complete(func_second())
print('TIME:', time.time()-s)
loop.run_until_complete(func_third())
print('TIME:', time.time()-s)
结果:
out: func_first
out: func_second 100
TIME: 3.062396764755249
out: func_first
out: func_third 101
TIME: 5.09357476234436
>>>
推荐阅读
- r - 如何在闪亮的框架内自定义单选按钮中的选择值
- java - spring boot mysql jpa Command Line Runner问题
- c++ - 串口发送后无法获取原始值
- java - 循环需要一些时间并导致错误的值;前 n 个素数
- vb.net - 进行搜索查询并更新结果后需要关闭程序以查看数据网格更改
- android - aar build with artifactory给出Android资源链接失败错误
- typescript - 如何在扩大的类型参数上设置类型文字(或防止类型扩大)?
- docker - Windows 10 上的 docker-compose:找不到图像?
- mysql - Laravel GroupBy 和 Count 使用 eloquent 模型
- c++ - if-else vs 三元函数调用性能