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

自定义Jupyter Kernel陷入无限重启循环,请求协助排查

解决自定义Jupyter Kernel无法通过WebSocket连接Notebook的问题
  • 检查Kernel的连接配置生成逻辑
    自定义Kernel必须正确处理Notebook传递的--connection-file参数,读取其中的ip、port、key、signature_scheme等配置来初始化WebSocket服务。命令行测试可能跳过了这一步,导致Notebook无法建立连接。确保你的入口脚本包含类似逻辑:

    import argparse
    import json
    
    parser = argparse.ArgumentParser()
    parser.add_argument('--connection-file', type=str)
    args = parser.parse_args()
    
    if args.connection_file:
        with open(args.connection_file, 'r') as f:
            conn_info = json.load(f)
        # 基于conn_info配置WebSocket服务端
    
  • 确认WebSocket服务端符合Jupyter协议规范
    你的Kernel需要正确实现tornado.websocket.WebSocketHandler,并处理kernel_info_request等核心消息类型。同时要确保服务端绑定了connection.json中指定的IP和端口:如果是localhost/127.0.0.1,需保证Kernel与Notebook在同一主机;如果是0.0.0.0,要检查防火墙是否拦截了对应端口。

  • 排查tornado版本适配细节
    即使降级到5.1.1,也要确认Kernel代码适配该版本的tornado API。比如tornado.web.Application的初始化方式、WebSocketHandler的open/on_message方法是否符合版本要求。可以在Kernel启动时打印版本验证环境:

    import tornado
    print(f"Tornado version: {tornado.version}")
    
  • 查看Notebook端Debug日志
    启动Notebook时开启debug模式,获取WebSocket连接失败的具体原因:

    jupyter notebook --debug
    

    重点关注日志中关于连接超时、握手失败、签名不匹配等错误信息,这能直接定位问题根源。

  • 验证消息签名逻辑
    Jupyter要求消息必须用connection.json中的key和signature_scheme签名,Notebook端会验证签名,不匹配会直接断开连接。确保你的Kernel实现了正确的签名逻辑,示例如下(以hmac-sha256为例):

    import hmac
    import hashlib
    
    def sign_message(message, key, signature_scheme):
        if signature_scheme.startswith('hmac-'):
            digest = signature_scheme.split('-')[1]
            h = hmac.new(key.encode(), message, getattr(hashlib, digest))
            return h.hexdigest()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:47:39