Python获取协程返回值的四种方式详解
作者:三爷带你飞 发布时间:2023-10-03 15:13:21
标签:Python,协程,返回值
介绍
获取协程返回值的四种方式:
1、通过ensure_future获取,本质是future对象中的result方
2、使用loop自带的create_task, 获取返回值
3、使用callback, 一旦await地方的内容运行完,就会运行callback
4、使用partial这个模块向callback函数中传入值
源码
import asyncio
from functools import partial
async def talk(name):
print(f"talk function run.")
await asyncio.sleep(0.1)
return f"{name} talk!"
async def sleep(name):
print(f"sleep function run.")
await asyncio.sleep(0.1)
return f"{name} sleep!"
def callback(name):
print(f"主动抛出接收:{name}")
if __name__ == "__main__":
# 通过ensure_future获取,本质是future对象中的result方法
# loop = asyncio.get_event_loop()
# get_future1 = asyncio.ensure_future(talk("Dog"))
# get_future2 = asyncio.ensure_future(sleep("Cat"))
# loop.run_until_complete(get_future1)
# loop.run_until_complete(get_future2)
# print(get_future1.result())
# print(get_future2.result())
# 使用loop自带的create_task, 获取返回值
# loop = asyncio.get_event_loop()
# task1 = loop.create_task(talk("Dog"))
# task2 = loop.create_task(sleep("Cat"))
# loop.run_until_complete(task1)
# loop.run_until_complete(task2)
# print(task1.result())
# print(task2.result())
# 使用callback, 一旦await地方的内容运行完,就会运行callback
# loop = asyncio.get_event_loop()
# task1 = loop.create_task(talk("Dog"))
# task2 = loop.create_task(sleep("Cat"))
# task1.add_done_callback(callback)
# task2.add_done_callback(callback)
# loop.run_until_complete(task1)
# loop.run_until_complete(task2)
# print(task1.result())
# print(task2.result())
# 使用partial这个模块向callback函数中传入值
loop = asyncio.get_event_loop()
task1 = loop.create_task(talk("Dog"))
task2 = loop.create_task(talk("Cat"))
task1.add_done_callback(partial(callback))
task2.add_done_callback(partial(callback))
loop.run_until_complete(task1)
loop.run_until_complete(task2)
print(task1.result())
print(task2.result())
依次执行结果
通过ensure_future获取,本质是future对象中的result方法
使用loop自带的create_task, 获取返回值
用callback, 一旦await地方的内容运行完,就会运行callback
使用partial这个模块向callback函数中传入值
来源:https://blog.csdn.net/hzblucky1314/article/details/121964346


猜你喜欢
- #!/usr/bin/python # Filename: gen_salt.py impo
- 使用Vue实现简单的用户登录界面,登录成功以后查询账号用户类型进行相应的页面路由跳转,效果如下图所示:HTML部分:<div clas
- 转自微信公众号:机器学习社区,经作者授权转载时间序列分析是数据科学中一个非常重要的领域,它主要包含统计分析、检测变化点、异常检测和预测未来趋
- 什么是CSS裸奔节?CSS裸奔节就是将这整站的css样式都去掉,这样所有的布局,颜色,背景什么的就都没有了(除非你使用table布局),只剩
- 本文实例总结了微信小程序实现给嵌套template模板传递数据的方式。分享给大家供大家参考,具体如下:一、template模板调用的数据是单
- 模型训练时GPU利用率太低的原因最近在训练SSD模型时发现GPU的利用率只有8%,而CPU的利用率却非常高。后来了解到,一般使用CPU进行数
- ES6添加了Promise对象,成功时在then中处理,失败则在catch中处理,但有时候,我们需要在无论成功或失败时都要做一些事,比如隐藏
- 场景:主库DB:utf8字符集备库DB:gbk字符集需求:校验主备数据是否一致,并且修复校验过程:设置主库连接为utf8,设置备库连接为gb
- django 模版显示的html中出现'类似的ascii字符,这是由于django对单引号进行了转义,可以通过关闭转 * 决h
- 学习了一天的深度学习,略有疲惫,我们用pygame搞个小游戏放松放松吧。今天我们的游戏主体是烟雨蒙蒙下彩虹雨,仿佛置身江南水乡。游戏描述我们
- 使用type()查看数据的类型在Python中, 可以使用type()类型来查看数据的类型:>>> type(3)<
- 这是我使用python写的第一个类(也算是学习面向对象语言以来正式写的第一个解耦的类),记录下改进的过程。分析需求最初,因为使用time模块
- echarts是百度推出的一款开源的基于JavaScript的可视化图表库,该开发库目前发展非常不错,且支持各类图形的绘制可定制程度高,Ec
- 本文实例讲述了js省市联动效果。分享给大家供大家参考,具体如下:运行效果截图如下:具体代码如下:<html> <head&
- redis无法访问本机真实ip地址1.我在进行用jedis来连接redis时出现了问题:我用Jedis jedis = new Jedis(
- 菜鸟版代码如下: 理解这段代码就基本上掌握了 function f_s() { var obj = document.getElementB
- 本篇文章介绍如何用OpenCV Python来计算直方图,并简略介绍用NumPy和Matplotlib计算和绘制直方图直方图的背景知识、用途
- SQLServer数据导出到excel有很多种方法,比如dts、ssis、还可以用sql语句调用openrowset。我们这里开拓思路,用C
- >>> import os &n
- 花了两周时间,利用工作间隙时间,开发了一个基于Django的项目任务管理Web应用。项目计划的实时动态,可以方便地被项目成员查看(^_^又重