无法重新创建 MariaDB 连接池

时间:2021-06-30 09:32:52

标签: python mariadb connection-pooling

我有一个调用 3 个方法的脚本。在这些方法中,我有第一个使用 mariadb connectionPool,第二个调用单个连接,第三个再次调用 connectionPool。在 main 方法中,我不创建连接,它们都在方法内部。所有池连接都已关闭。然而,当它到达第三种方法时,当它打开池时,进程挂起并简单地死亡而不会给出任何错误。我遵循了示例here。即使我只调用相同的方法两次,也会发生相同的行为,如下例所示。

import mariadb

def first():
    # it dies here the second time
    pool = mariadb.ConnectionPool(
        pool_name = 'pool1',
        pool_size = 3,
        pool_reset_connection = False,
        host = '127.0.0.1',
        user = 'root',
        password = 'secret',
        database = 'test',
    )

    # These would normally be allocated in separate threads:
    conn1 = pool.get_connection()
    conn2 = pool.get_connection()
    conn3 = pool.get_connection()
    # Attempting to fetch a 4th connection would throw an exception
    # given the pool_size == 3 option above.

    cursor = conn1.cursor()
    cursor.execute('INSERT INTO sample VALUES (?, ?)', (1, 2))

    cursor = conn2.cursor()
    cursor.execute('INSERT INTO sample VALUES (?, ?)', (3, 4))

    cursor = conn3.cursor()
    cursor.execute('INSERT INTO sample VALUES (?, ?)', (5, 6))

    conn1.commit()
    conn2.commit()
    conn3.commit()

    conn1.close()
    conn2.close()
    conn3.close()


def main():
    first()
    first()

我认为它并没有真正破坏池,或者它对数据库保持打开状态,但我没有找到任何关于它的信息,也没有引发任何异常。有谁知道我如何销毁/关闭池以重新使用它?

1 个答案:

答案 0 :(得分:0)

所以,这很奇怪。我在调试我的代码时不记得我有一些断点,半小时后我回到我的电脑,该进程仍在运行并在第一次调用后被阻塞,但在第三次(原始问题)之前,我继续运行它跑完所有没有死。

所以问题应该是 mariaDB,而不是 python,也许池并没有真正关闭,但过了一段时间它超时了,它又可用了。

根据这种直觉,我尝试了类似的方法,我为我使用的池指定了唯一的名称,即在创建池时更改 pool_name 参数。我尝试运行该算法,结果没有任何错误。

所以,我不知道它是否存在,但由于我们可以在 mariaDB 中创建一个池,我们也应该能够关闭/销毁它