【发布时间】:2021-07-12 16:29:44
【问题描述】:
import asyncio
async def f():
# something, for example await asyncio.sleep(4)
return "return value from f"
async def main():
# schedule f, print result, but don't await
for i in range(10):
await asyncio.sleep(1) # just an example for some other task
print(i)
asyncio.run(main())
我可以使用print(await f()),但由于await 而阻塞。我希望print 在f() 返回后被称为“回调函数”,而main() 的其余部分已经继续。因此,假设f 中的# something 花费了 4 秒,预期的输出将如下所示:
0
1
2
3
return value from f
4
5
6
7
8
9
【问题讨论】:
-
您可能有几个选择。
add_done_callback、gather和as_completed浮现在脑海中。但是,如果不知道更多细节,很难说哪种方法效果最好。
标签: python async-await python-asyncio coroutine