Python使用aioconsole.ainput无法在等待期间执行其他操作怎么办?
问题原因
你代码中的所有操作通过await串行执行,await会暂停当前协程,等待目标操作完成后才会执行后续代码,因此三个操作会按「休眠5秒→等待输入→再休眠5秒」的顺序依次执行,自然无法实现并行效果。
解决方法
要实现多个操作同时运行,需要将不同逻辑拆分为独立协程,通过asyncio.create_task将任务提交到事件循环并发调度。
以下是可实现「后台计数的同时响应用户输入」的示例代码:
import asyncio import aioconsole # 后台运行的计数逻辑 async def background_counter(): count = 0 # 计数到30自动停止,你可以根据需求修改逻辑 while count < 30: print(f"当前计数:{count}") count += 1 await asyncio.sleep(1) async def main(): # 创建后台任务,提交后立即返回,不会阻塞当前协程 bg_task = asyncio.create_task(background_counter()) # 等待用户输入的过程中,后台计数任务会同步运行 input_content = await aioconsole.ainput("请输入任意内容:\n") print(f"接收到你的输入:{input_content}") # 输入完成后如果后台任务还在运行,主动取消 if not bg_task.done(): bg_task.cancel() try: await bg_task except asyncio.CancelledError: print("后台计数任务已终止") if __name__ == "__main__": asyncio.run(main())
运行上述代码后,程序会每秒打印一次计数值,同时你随时可以输入内容,输入完成后程序会输出你输入的内容并终止后台计数任务。
内容的提问来源于stack exchange,提问作者salius
相关产品推荐
相关产品推荐

