Python获取协程返回值的四种方式详解
本文详解Python中获取协程返回值的四种常用方式:通过ensure_future结合future对象的result方法、使用loop的create_task、利用add_done_callback回调函数以及借助partial模块向回调传参。文章提供完整源码与执行结果分析,帮助开发者掌握异步编程中结果获取的最佳实践。
介绍
在Python异步编程中,获取协程执行后的返回值是常见需求。本文主要介绍四种获取协程返回值的方法:
第一种方法是通过ensure_future函数获取协程对象,其本质是利用future对象中的result方法来提取返回值。
第二种方法是使用事件循环(loop)自带的create_task函数创建任务,从而获取协程的返回值。
第三种方法是使用回调函数(callback)。当await语句后的内容执行完毕后,会自动触发注册的callback函数。
第四种方法是使用partial模块。通过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函数中传入值

到此这篇关于Python获取协程返回值的四种方式详解的文章就介绍到这了,更多相关Python获取协程返回值内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













