bilibili-api
bilibili-api copied to clipboard
Windows下修改事件循环会导致其他第三方库(如:nonebot)报错
环境:python3.11
bilibili_api.__init__.py中
BILIBILI_API_VERSION = "16.1.1"
# 如果系统为 Windows,则修改默认策略,以解决代理报错问题
if "windows" in platform.system().lower():
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) # type: ignore
此处代码会导致一些默认使用WindowsProactorEventLoopPolicy的第三方库报错,如:nonebot中_make_subprocess_transport继承自WindowsProactorEventLoopPolicy
先贴一个链接,有关你出现的问题:https://github.com/orgs/nonebot/discussions/13 ,~~当然如果你找到了当我没说~~。
如果你按照那里的这么去做,其实无非只有一个影响:不能用 aiohttp 的代理。但是 这个模块也是支持 httpx 的,所以如果真的需要代理,你可以考虑使用 httpx 进行请求。
但是现在 httpx 又有一个问题:不支持 websocket,因此 LiveDanmaku 和 VideoOnlineMonitor 还是得用回 aiohttp,这个时候你又不能用代理了。
所以……建议自行进行权衡。
最后贴张表:当你按照开头给的链接对这个问题进行处理后,模块对不同功能的支持情况:
| 无代理/有代理 | aiohttp | httpx |
|---|---|---|
VideoOnlineMonitor (旧接口,模块内有新接口) & LiveDanmaku |
✅ / ❌ | ❌ / ❌ (httpx 本身便不支持 WebSocket) |
login.py |
❌ / ❌ (这部分本身便不支持异步) | ✅ / ✅ |
| 其他接口 | ✅ / ❌ | ✅ / ✅ |