我有一个调用 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()
我认为它并没有真正破坏池,或者它对数据库保持打开状态,但我没有找到任何关于它的信息,也没有引发任何异常。有谁知道我如何销毁/关闭池以重新使用它?
答案 0 :(得分:0)
所以,这很奇怪。我在调试我的代码时不记得我有一些断点,半小时后我回到我的电脑,该进程仍在运行并在第一次调用后被阻塞,但在第三次(原始问题)之前,我继续运行它跑完所有没有死。
所以问题应该是 mariaDB,而不是 python,也许池并没有真正关闭,但过了一段时间它超时了,它又可用了。
根据这种直觉,我尝试了类似的方法,我为我使用的池指定了唯一的名称,即在创建池时更改 pool_name
参数。我尝试运行该算法,结果没有任何错误。
所以,我不知道它是否存在,但由于我们可以在 mariaDB 中创建一个池,我们也应该能够关闭/销毁它