使用Bleak库时遇asyncio.run()运行时错误的求助
解决Spyder中运行Bleak异步代码的RuntimeError问题
错误原因
Spyder的IPython内核默认已启动一个asyncio事件循环,asyncio.run()会尝试创建新的事件循环,触发RuntimeError: asyncio.run() cannot be called from a running event loop错误。
解决方案
方案1:修改代码复用现有事件循环
将原代码中的asyncio.run(main())替换为以下代码,直接使用当前已运行的事件循环:
import asyncio from bleak import BleakScanner async def main(): devices = await BleakScanner.discover() for d in devices: print(d) loop = asyncio.get_event_loop() loop.run_until_complete(main())
方案2:临时关闭IPython自动await功能
在Spyder的IPython控制台中先执行以下魔法命令:
%autoawait off
之后运行你的原代码即可。
方案3:永久禁用Spyder的asyncio集成
- 打开Spyder,点击顶部菜单栏的
工具->偏好设置 - 在左侧列表选择
IPython控制台->高级设置 - 取消勾选
启用asyncio事件循环集成选项 - 重启Spyder,原代码即可正常运行
内容的提问来源于stack exchange,提问作者eljamba
相关产品推荐
相关产品推荐

