Python3.10运行币安Websocket代码触发event_loop弃用警告如何解决
问题原因
该警告由Python 3.10对asyncio模块的行为调整触发:Python 3.9及更早版本中,若当前没有活跃的事件循环,调用asyncio.get_event_loop()会自动创建新循环并返回;从Python 3.10开始该行为被标记为弃用,无活跃循环时调用该方法就会抛出你收到的弃用警告。
解决方案
方案一(推荐):使用asyncio.run()启动协程
asyncio.run()是Python 3.7及以上版本官方提供的协程入口方法,会自动处理事件循环的创建、运行、销毁逻辑,完全不需要手动操作事件循环。
你只需要将原代码末尾的启动逻辑替换即可,修改后的完整代码如下:
import asyncio from binance import AsyncClient, BinanceSocketManager async def main(): client = await AsyncClient.create() bm = BinanceSocketManager(client) # start any sockets here, i.e a trade socket ts = bm.trade_socket('BNBBTC') # then start receiving messages async with ts as tscm: while True: res = await tscm.recv() print(res) if __name__ == "__main__": asyncio.run(main())
方案二:手动创建事件循环
如果你有特殊需求需要手动管理事件循环(比如自定义循环参数),可以手动创建新循环并设置为当前循环后再运行,修改后的启动逻辑如下:
if __name__ == "__main__": loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) loop.run_until_complete(main())
两种方案都可以完全消除该弃用警告,不会影响原有Binance WebSocket的数据接收逻辑。
内容的提问来源于stack exchange,提问作者Max Power
相关产品推荐
相关产品推荐

