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

M1 Pro Mac无法运行Binance WebSocket交易代码,Intel平台正常,求解决

M1 Pro Mac上Binance WebSocket订单簿策略代码卡住无输出的排查方案

架构兼容性排查

  • 先确认Python环境是原生ARM64:运行python -c "import platform; print(platform.machine())",输出应为arm64。如果是x86_64,说明用的是Rosetta转译版本,建议替换为官网或brew安装的原生ARM64 Python,部分网络库在转译环境下会出现线程阻塞问题。
  • 强制重装ARM64版本的依赖库:执行ARCHFLAGS="-arch arm64" pip install --force-reinstall websocket-client python-binance,确保依赖是适配ARM架构的。

线程同步问题修正

  • 别乱用threading.Lock():如果你是用锁来同步process_message(WebSocket回调线程)和analyze_data(主线程/分析线程)的数据流,直接换成queue.Queue更稳妥——队列本身是线程安全的,不需要额外加锁,能避免锁顺序错误导致的死锁。
  • 检查锁的使用场景:如果必须用锁,绝对不要在锁内执行耗时操作(比如复杂计算、IO请求),WebSocket回调线程被阻塞会导致消息堆积,最终整个程序卡住。

多线程调试技巧(绕过VSCode主线程限制)

  • 加详细线程日志:在关键函数里埋日志,比如:
    import logging
    import threading
    
    logging.basicConfig(level=logging.INFO, format="[%(thread)d] %(message)s")
    
    def process_message(msg):
        logging.info("Received WebSocket message")
        # 后续逻辑
    
    def analyze_data(data):
        logging.info("Start analyzing orderbook data")
        # 后续逻辑
    
    运行后看日志输出,就能知道各个线程有没有正常执行,卡在了哪个环节。
  • 用py-spy做栈分析:安装brew install py-spy,启动程序后用py-spy top --pid <你的Python进程ID>,能实时看到所有线程的调用栈,直接定位卡住的函数或等待锁的位置。

WebSocket连接优化

  • 配置心跳参数:创建Binance WebSocket客户端时,手动指定心跳间隔和超时,避免连接假死:
    from binance.websockets import BinanceSocketManager
    
    bm = BinanceSocketManager(client, ping_interval=30, ping_timeout=10)
    
  • 开启调试日志:打开Binance客户端的DEBUG日志,查看WebSocket连接和消息收发细节:
    import logging
    client.logger.setLevel(logging.DEBUG)
    

内容的提问来源于stack exchange,提问作者Angela

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:33:33