Python异步函数使用误区:如何实现函数无需等待并行执行?
问题解析与修改方案
错误原因
asyncio.run(main())是阻塞调用:它会持续运行直到main()函数内所有异步操作完成,后续的do_something()只能在这之后执行。main()内的await task直接阻塞流程:创建异步任务后立刻等待其完成,导致整个异步任务执行期间,没有机会运行do_something()。
修改方案
将 do_something() 的调用移到 main() 函数内部、创建异步任务之后、等待任务完成之前。这样 do_something() 会在异步任务启动后立即执行,无需等待异步任务结束。
修改后的完整代码:
import os import asyncio from datetime import datetime async def do_some_iterations(): for i in range(10): print(datetime.now().time()) await asyncio.sleep(1) print('... Cool!') async def main(): task = asyncio.create_task(do_some_iterations()) # 立即执行同步函数,无需等待异步任务 do_something() # 等待异步任务完成(如果不需要等待异步任务结束,可删除此行) await task def do_something(): print('something...') if __name__ == "__main__": asyncio.run(main())
预期输出
修改后 do_something() 的输出会优先出现在异步任务的时间打印之前,示例输出如下:
something... 00:50:12.345678 00:50:13.346789 00:50:14.347890 ... ... Cool!
内容的提问来源于stack exchange,提问作者Aenaon
相关产品推荐
相关产品推荐

