当前位置: 首页> 科技> 数码 > 【Python】使用 aysncio 异步编程获取协程返回值

【Python】使用 aysncio 异步编程获取协程返回值

时间:2025/7/9 11:42:59来源:https://blog.csdn.net/u013948858/article/details/141267962 浏览次数:0次

使用 aysncio 异步编程获取协程返回值

author: jayzhen
date: 20240816

方案

  • 协程返回值的四种方式:
    • 通过 asyncio.ensure_future 获取
    • 使用 asyncio.get_event_loopcreate_task 方法 , 获取返回值
    • 使用 callback await 内容运行完,就会运行 callback 方法
    • 使用 partial 模块向 callback 函数中传入值

代码实践

# -*- coding: utf-8 -*-"""
@author: jay
@version: Python 3.8+
@file: demo.py
@time: 2024/8/16 19:12
"""import asyncio
from functools import partialasync def work(name):print(f"work function run.")await asyncio.sleep(0.5)return f"{name} working!"async def smoke(name):print(f"smoke function run.")await asyncio.sleep(0.5)return f"{name} smoking!"def callback(future):result = future.result()print(f"callback accept result:{result}")def callback_with(param, future):result = future.result()print(f"callback accept result:{result} {param}")def use_ensure_future_for_return():"""通过ensure_future获取,本质是future对象中的result方法"""loop = asyncio.get_event_loop()get_future1 = asyncio.ensure_future(work("moyu"))get_future2 = asyncio.ensure_future(smoke("huazi"))loop.run_until_complete(get_future1)loop.run_until_complete(get_future2)print(get_future1.result())print(get_future2.result())loop.close()def use_create_task_for_return():"""使用 asyncio.get_event_loop() 自带的 create_task, 获取返回值"""loop = asyncio.get_event_loop()task1 = loop.create_task(work("moyu"))task2 = loop.create_task(smoke("huazi"))loop.run_until_complete(task1)loop.run_until_complete(task2)print(task1.result())print(task2.result())loop.close()def use_callback_for_return():"""使用callback, 一旦await地方的内容运行完,就会运行callback"""loop = asyncio.get_event_loop()task1 = loop.create_task(work("moyu"))task2 = loop.create_task(smoke("huazi"))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())loop.close()def use_partial_for_return():"""使用partial这个模块向callback函数中传入值"""loop = asyncio.get_event_loop()task1 = loop.create_task(work("moyu"))task2 = loop.create_task(work("huazi"))task1.add_done_callback(partial(callback_with, "work"))task2.add_done_callback(partial(callback_with, "smoke"))loop.run_until_complete(task1)loop.run_until_complete(task2)print(task1.result())print(task2.result())loop.close()if __name__ == "__main__":"""# 注意:由于回调函数已经处理了打印结果,这里不需要再次打印result# 如果需要查看结果,可以在回调函数中处理# 或者在回调之外的地方检查任务状态(例如,在事件循环结束后)"""# use_ensure_future_for_return()# use_create_task_for_return()# use_callback_for_return()use_partial_for_return()
关键字:【Python】使用 aysncio 异步编程获取协程返回值

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: