替换回调辅助函数以将协程中的 return 值传递给另一个函数
Replace callback helper function to pass return value from coroutine into another function
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
的其余部分。有没有更优雅的方法来做到这一点?我必须首先定义一个“回调辅助函数”,这似乎很奇怪。我如何 运行 协程并将 return 值传递给另一个函数而不阻塞?我想要做的就是在完成后使用 f
中的 return 值调用 g
。我认为 asyncio
中必须有一些东西。
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
的其余部分。有没有更优雅的方法来做到这一点?我必须首先定义一个“回调辅助函数”,这似乎很奇怪。我如何 运行 协程并将 return 值传递给另一个函数而不阻塞?我想要做的就是在完成后使用 f
中的 return 值调用 g
。我认为 asyncio
中必须有一些东西。