nebula2.fbthrift.protocol.TProtocol.TProtocolException: Unexpected type for skipping 48

使用python连接nebula提供flask接口服务报错继续讨论:

  • nebula 版本 2.6.1
  • 部署方式:分布式
  • 安装方式: Docker
    def __init__(
        self,
        ip: str = "10.1.1.248",
        port: int = 9669,
        name: str = "***",
        password: str = "***",
        space: str = "demo",
    ):
        config = Config()
        config.max_connection_pool_size = 128
        connection_pool = ConnectionPool()
        connection_pool.init(addresses=[(ip, port)], configs=config)
        self.session = connection_pool.get_session(user_name=name, password=password)
      ...
    def run(self, command: str):
        status = self.session.execute(command)
        if status.is_succeeded():
            return status
        elif status.error_msg() != "Existed!":
            print(status.error_msg())
            print(command)
            return False
        self.session.release()

初步怀疑是同一个session长时间没有使用,自动释放了,请问下是不是有这种情况?
用Python调用的时候需要每次建session吗?

  1. session到期会被清理, 可以在配置里修改 session_idle_timeout_secs 来延长 session 有效期
  2. 建议的用法是建一个全局的连接池, 从连接池创建 session 后重复用同一个 session 来减少重复创建和释放的开销, 具体可以根据你的业务修改

session如果不存在了会报相应错误, 这个看着不像, 你的客户端版本是和服务端对应的吗

1 个赞
  • 现在用的就是第二个方案,全局的连接池

  • 是对应的:nebula2-python 2.6.0

  • 执行的nql是同一条,我重启服务就正常,过一会就报错,报错位置是:
    if status.is_succeeded():

你贴的第二个代码块, 为什么最后要释放 session 呢, 如果一次的执行 reach 到最后一行那session就不可用了

因为有时候运行快了,会报session没有释放的错误,加上后就没有遇见过。

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。