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方法

Python获取协程返回值的四种方式详解

使用loop自带的create_task, 获取返回值

Python获取协程返回值的四种方式详解

用callback, 一旦await地方的内容运行完,就会运行callback

Python获取协程返回值的四种方式详解

使用partial这个模块向callback函数中传入值

Python获取协程返回值的四种方式详解

来源: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
  • asp之家 网络编程 m.aspxhome.com