替换回调辅助函数以将协程的返回值传递给另一个函数

响尾蛇
import asyncio

async def f():
    await asyncio.sleep(2.5)
    return "return value from f after 2.5 seconds"

def g(x):
    print(x)

async def main():
    ##############################################
    async def callback_helper(original, callback):
        callback(await original())
    asyncio.create_task(callback_helper(f, g))
    ##############################################
    for i in range(1, 5):
        await asyncio.sleep(1)
        print(i, "seconds in main")

asyncio.run(main())

这正是我想要的:

1 seconds in main
2 seconds in main
return value from f after 2.5 seconds
3 seconds in main
4 seconds in main

我只能修改两####################之间的代码我不能改变fg或其余的main有没有更优雅的方法来做到这一点?我必须首先定义一个“回调辅助函数”,这似乎很奇怪。如何在不阻塞的情况下运行协程并将返回值传递给另一个函数?我想要做的就是调用g完成后的返回值f我认为必须有一些东西asyncio

用户4815162342

在包装协程中等待协程的替代方法是使用add_done_callback,它用于所有期货,因此也适用于任务

asyncio.create_task(f()).add_done_callback(lambda fut: g(fut.result()))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将pair返回值直接传递给另一个函数

将一个函数的返回值传递给已经设置了参数的另一个函数?

如何将暂停函数作为参数传递给另一个函数?Kotlin协程

如何从函数返回值,该值作为JavaScript中的参数传递给另一个函数?

使用 Python 将返回值从一个函数传递到另一个函数

从另一个函数内的回调函数返回值

如何使用itertools将返回的值从一个函数传递给另一个函数?

如何将返回的值传递给另一个函数

将变量从回调函数传递给另一个函数?

将模板回调函数传递给另一个模板函数

节点度量执行时间-作为参数传递给另一个函数的异步返回值

将 json 对象传递给另一个函数以在 for 循环中调用

如何将一个函数的值传递给另一个函数?

将一个函数的值传递给另一个函数

将任务的返回值作为参数传递给另一个任务的问题

将一个函数的返回参数值传递给另一个烧瓶

Python:将类成员函数传递给另一个类的回调

将函数返回值分配为另一个函数参数

使用另一个函数返回值

将两个返回值传递给具有一个参数的函数

将函数返回作为参数传递给另一个函数

C ++-将数组返回主函数并将数组传递给另一个函数

NameError: name '' is not defined - 将函数返回作为输入传递给另一个函数

将值从一个函数传递到另一个函数以进行计算

当另一个函数返回值时不协调 API 消息传递

如何将一个函数的输入值与另一个函数的返回值进行比较?

是否可以展开可变参数(lambda)模板并将这些函数的返回值传递给另一个可变参数函数?

将参数传递给另一个函数

如何将一个PostgreSQL查询的返回值传递给另一个PostgreSQL查询?