在python

时间:2017-01-25 07:50:51

标签: python

我的记忆是在使用连接后我们需要关闭它。但我发现一个有趣的事情,当连接变量无法访问时,看起来连接是自动关闭。

import MySQLdb
import time

def get_mysql_connection():
    db = MySQLdb.connect(host="localhost",
                         user="test",
                         passwd="test",
                         db="test")
    db.autocommit = True
    return db


for _ in range(1,100):
    print "get connection"
    a = get_mysql_connection()
    print id(a)
    print a.autocommit
    c = a.cursor()
    c.execute("select 1")
    print c.fetchall()
    print "completed"
time.sleep(11000)

然后在mysql会话中运行

mysql> show processlist;
+-----+------+-----------+------+---------+------+----------+------------------+
| Id  | User | Host      | db   | Command | Time | State    | Info             |
+-----+------+-----------+------+---------+------+----------+------------------+
|  10 | test | localhost | NULL | Query   |    0 | starting | show processlist |
| 310 | test | localhost | test | Sleep   |    8 |          | NULL             |
+-----+------+-----------+------+---------+------+----------+------------------+
2 rows in set (0.00 sec)

我只看到2个会话,一个是我的mysql命令行,另一个来自我的python应用程序。

在我的python代码中,我打开100个连接,并且没有关闭它们中的任何一个。但是在应用程序中只到达了最后一个连接,因为变量a被重新分配给每个循环中的新连接。在python中没有到达所有其他99个连接。所以我想如果没有达到连接,那么它会以某种方式自动关闭。任何专家都可以证实这种行为吗?

更新: 在我添加

之后
print id(a)

到函数,然后我发现id在2个不同的值之间变化,这意味着它必须使用连接池。我检查了文档,但是只有当pool_name或pool_size的pass参数创建连接池时才会说。不确定如何创建连接池,例如连接名称和我的代码中创建的池的连接大小。

0 个答案:

没有答案