You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:24:04