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
投稿
猜你喜欢
删除数组中重复项(uniq)
2009-12-28 12:23:00
重新认识CSS的权重
2011-05-24 17:06:00
asp代码WinHttp.WinHttpRequest.5.1使用例子
2010-03-11 21:28:00
MySQL应用技巧之内存使用线程独享
2010-08-08 08:33:00
一个jquery日期选取插件源码
2009-12-23 19:15:00
如何使用AspUpload2.0组件?
2010-06-05 12:33:00
学习ASP.NET八天入门:第二天
2007-08-07 13:24:00
Smush it - 一款图片压缩的Firefox插件,很好,很强大!
2009-04-12 20:09:00
web标准页面知识必备 Ⅰ
2008-03-06 13:24:00
你应当了解的5个CSS3新技术
2009-02-11 13:01:00
asp全面解析Server对象
2008-10-19 17:24:00
Python cookbook(数据结构与算法)保存最后N个元素的方法
2023-08-08 05:06:38
制作主页的独门功夫五十招
2010-09-05 21:15:00
asp如何实现人民币的大写转换?
2010-05-24 18:27:00
MongoDB为用户设置访问权限
2023-07-16 06:03:52
关于JS中变量的显式申明和隐式申明
2008-09-12 13:04:00
网站中美好的细节
2011-07-13 18:43:07
django框架实现模板中获取request 的各种信息示例
2023-08-31 05:16:41
浅谈SQL与PLSQL开发实战
2011-05-05 08:15:00
关于网站导航设计的探讨
2008-02-28 13:20:00