【问题标题】:Cassandra creates multiple connections and not releaseCassandra 创建多个连接而不释放
【发布时间】:2019-09-11 21:27:32
【问题描述】:

我正在使用 Python Cassandra-Driver 3.15.1

我有一个运行多进程的脚本。

问题是由于某种原因,调用close_connection(get_connection->运行CQL->close_connection->然后到结束调用close_cluster后连接没有正确释放。这导致超过数百个连接/会话保持打开状态

非常感谢任何有关在何处查找问题的提示。

def get_connection(self, timeout = 600):
    self.session = Cluster([self.host]).connect()
    self.session.default_timeout = timeout
    return self.session

def close_connection(self, conn):
    return conn.shutdown()

def close_cluster_connection(self):
    return self.cluster.shutdown()

【问题讨论】:

    标签: python cassandra


    【解决方案1】:

    每个Cluster 对象在完成后都应该显式关闭,但这在此处是不可能的,因为您没有保留Cluster([self.host])get_connection 中创建的实例。

    close_cluster_connection 引用 self.cluster。如果它已经实例化并且您要使用的集群实例,get_connection 应该如下所示。

    def get_connection(self, timeout = 600):
        self.session = self.cluster.connect()
        self.session.default_timeout = timeout
        return self.session
    

    如果您不能在那里使用self.cluster,您必须找到一种方法来跟踪您的Cluster 实例并在完成后关闭它们。

    【讨论】:

    • 感谢@falcojr 的提示。这确实帮助解决了 50% 的问题。我通过实现一个析构函数应用了另一个 hack,它解决了其余 50% 的问题。现在所有连接都已正确关闭
    猜你喜欢
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 2016-10-24
    • 2013-01-29
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 2018-04-15
    相关资源
    最近更新 更多