Python获取协程返回值的四种方式详解
作者:三爷带你飞 时间:2023-10-03 15:13:21
介绍
获取协程返回值的四种方式:
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
标签:Python,协程,返回值
0
投稿
猜你喜欢
如何使用pandas读取txt文件中指定的列(有无标题)
2022-04-25 15:30:18
python学习笔记之调用eval函数出现invalid syntax错误问题
2023-11-03 01:48:30
Python使用jupyter notebook查看ipynb文件过程解析
2021-07-25 20:26:30
通向MySQL神秘王国的图形化之路
2008-12-08 13:43:00
java数据库开发之JDBC基础使用方法及实例详解
2024-01-21 04:37:00
Python中函数带括号和不带括号的区别及说明
2023-01-23 05:23:28
Oracle 正则表达式实例详解
2024-01-25 23:43:01
numpy拼接矩阵的实现
2021-02-09 06:35:07
使用Python对Csv文件操作实例代码
2023-04-17 23:50:57
Python字符编码与函数的基本使用方法
2023-11-29 17:01:30
javascript事件冒泡实例分析
2023-07-02 05:29:58
MySQL的全局锁和表级锁的具体使用
2024-01-22 01:04:55
mysql下mysql-udf-http效率测试小记
2024-01-16 15:14:21
python3+selenium实现qq邮箱登陆并发送邮件功能
2023-02-04 17:54:23
Python Opencv中基础的知识点
2023-06-08 21:10:48
Python学习之路之pycharm的第一个项目搭建过程
2022-01-14 23:16:52
属性与 @property 方法让你的python更高效
2023-02-02 08:20:18
浅谈python已知元素,获取元素索引(numpy,pandas)
2023-08-04 16:01:00
吐血推荐珍藏的Visual Studio Code插件(推荐)
2023-02-09 08:58:31
python多进程共享变量
2023-08-30 07:40:53