python-binance ThreadedWebSocketManager基础示例失效求助
问题分析与解决方案
你的脚本仅输出btceur@kline_1m但未触发process_message,结合使用的python-binance v1.0.19(2023-08)和Python 3.12.3,可从以下方向排查修复:
1. 版本兼容性问题
Python 3.12在2023年10月发布,而python-binance v1.0.19早于该版本,存在线程模块的兼容性冲突(Python 3.12对threading模块做了底层改动)。
解决方法:
- 降级Python到3.11.x版本,这是与v1.0.19兼容的稳定版本;
- 或升级python-binance至v1.0.20及以上版本(该版本修复了Python 3.12兼容问题),执行命令:
pip install python-binance --upgrade
2. 移除不必要的API密钥
K线WebSocket属于公共市场数据端点,无需API密钥/签名认证。你传入密钥可能干扰连接逻辑:
修改脚本,初始化ThreadedWebsocketManager时去掉密钥参数:
from binance import ThreadedWebsocketManager def process_message(msg): print("message type: {}".format(msg['e'])) print(msg) # 公共数据无需密钥,直接初始化 twm = ThreadedWebsocketManager() twm.start() ret = twm.start_kline_socket(callback=process_message, symbol='BTCEUR', interval='1m') print(ret) twm.join()
3. 验证网络连接
检查本地网络是否拦截了Binance的WebSocket连接:
- 使用命令行工具测试(需安装
wscat):
若能收到JSON格式的K线数据,说明网络正常;否则排查防火墙、代理或运营商限制。wscat -c wss://stream.binance.com:9443/ws/btceur@kline_1m
4. 添加错误捕获排查问题
在脚本中加入错误回调,查看连接失败细节:
from binance import ThreadedWebsocketManager import logging # 开启日志输出连接细节 logging.basicConfig(level=logging.DEBUG) def process_message(msg): print("message type: {}".format(msg['e'])) print(msg) def error_callback(msg): print("连接错误信息:") print(msg) twm = ThreadedWebsocketManager() twm.start() # 绑定错误回调 ret = twm.start_kline_socket(callback=process_message, symbol='BTCEUR', interval='1m', on_error=error_callback) print(ret) twm.join()
内容的提问来源于stack exchange,提问作者Lukas Eber
相关产品推荐
相关产品推荐

