【发布时间】:2021-09-22 02:05:21
【问题描述】:
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
我只能修改#################### 行之间的代码。我无法更改f、g 或main 的其余部分。有没有更优雅的方法来做到这一点?我必须首先定义一个“回调辅助函数”,这似乎很奇怪。如何运行协程并将返回值传递给另一个函数而不阻塞?我要做的就是在完成后使用来自f 的返回值调用g。我认为asyncio 中一定有一些东西。
【问题讨论】:
标签: python async-await python-asyncio coroutine