Nemo2011 / bilibili-api

哔哩哔哩常用API调用。支持视频、番剧、用户、频道、音频等功能。原仓库地址:https://github.com/MoyuScript/bilibili-api
https://nemo2011.github.io/bilibili-api/
GNU General Public License v3.0
2.08k stars 196 forks source link

Windows下修改事件循环会导致其他第三方库(如:nonebot)报错 #669

Open MerlinCN opened 7 months ago

MerlinCN commented 7 months ago

环境: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

Nemo2011 commented 7 months ago

先贴一个链接,有关你出现的问题:https://github.com/orgs/nonebot/discussions/13当然如果你找到了当我没说

如果你按照那里的这么去做,其实无非只有一个影响:不能用 aiohttp 的代理。但是 这个模块也是支持 httpx 的,所以如果真的需要代理,你可以考虑使用 httpx 进行请求。

但是现在 httpx 又有一个问题:不支持 websocket,因此 LiveDanmakuVideoOnlineMonitor 还是得用回 aiohttp,这个时候你又不能用代理了。

所以……建议自行进行权衡。

最后贴张表:当你按照开头给的链接对这个问题进行处理后,模块对不同功能的支持情况:

无代理/有代理 aiohttp httpx
VideoOnlineMonitor (旧接口,模块内有新接口) & LiveDanmaku ✅ / ❌ ❌ / ❌ (httpx 本身便不支持 WebSocket)
login.py ❌ / ❌ (这部分本身便不支持异步) ✅ / ✅
其他接口 ✅ / ❌ ✅ / ✅