程序运行以后,刷新页面,在mysql的status里面检测到Threads_connected的值不断上升。

对程序断点调试,发现,是由于下面的代码导致。

class ConnectionMySQL(object):
"""
MySQL
""" def __init__(self):
self.mypool = pool.QueuePool(self.getconn, pool_size=15, timeout=30)
self.conn = self.mypool.connect()
print self.conn def getconn(self):
c = libdb.connect(host=configeApp.DB_HOST, port=configeApp.DB_PORT, user=configeApp.DB_USER,
passwd=configeApp.DB_PASSWD, db=configeApp.DB_DATABASE, use_unicode=True, charset='utf8')
return c def ExceptionHandling_mysql(self,sql):
try:
cur = self.conn.cursor(libdb.cursors.DictCursor)
rowcount = cur.execute(sql)
self.conn.commit()
result = cur.fetchall()
while cur.nextset(): pass
except Exception, e:
print 'This is mysql: %s' % (sql)
print e
result = [] self.mysql_del(cur)
return result def mysql_del(self, cur):
if cur:
cur.close() def mysql_delCon(self):
if self.conn:
self.conn.close()

问题在于,每次我创建了ConnectionMySQL的对象cm,在使用完毕,调用cm.mysql_delCon(),并没有真正的销毁掉connection对象。也就是mysql的connection是没有关闭的,导致了connection不断增加。

于是,我以我自己的需求,我不建立连接池,直接获取connection对象,那么可以解决问题。如果为了和同事共用代码,就需要在我不需要链接的时候,把连接池里的conn对象包括连接池一起销毁掉。

查看class QueuePool(Pool)类的源代码,找到函数dipose可以实现销毁自己的功能:

   def dispose(self):
while True:
try:
conn = self._pool.get(False)
conn.close()
except sqla_queue.Empty:
break self._overflow = 0 - self.size()
self.logger.info("Pool disposed. %s", self.status())

于是,修改mysql_delCon函数为:

    def mysql_delCon(self):
if self.conn:
self.conn.close()
if self.mypool:
self.mypool.dispose()

测试,也能正常工作。Threads_connected不再持续增加。

mysql connection不断增加的更多相关文章

  1. MySQL基础知识:MySQL Connection和Session

    在connection的生命里,会一直有一个user thread(以及user thread对应的THD)陪伴它. Connection和Session概念 来自Stackoverflow的一个回答 ...

  2. mysql connection refused

    mysql数据库认证的时候和别的服务器不一样,即使mysqld数据库服务器没有启动,使用mysql这种客户端程序去连接,也要先输入密码,从而使人有一种错觉,以会服务器已经正常启动了.是不是密码或是主机 ...

  3. Too Many Connections: How to Increase the MySQL Connection Count To Avoid This Problem

    1.问题描述 在启动使用mysql数据库的项目时,遇到一个报错,如下: Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConn ...

  4. MySQL: Connection Refused,调整 mysql.ini中的 max_connections

    连接相同的结构的MySQL数据库,一套库Tomcat启动正常,另一套库一直报Connection Refused. 可以断定是连接数太小了.查找mysql.ini中的 max_connections, ...

  5. mac mysql connection

    随着网络日益发展还有os x用户的增多,有可能会需要在自己的x系统中运行mysql+php环境,比如架设网站或者测试之类.简单步骤如下: 1.下载MySQL 5.x 发行版,解压并安装映像中的两个安装 ...

  6. Ubuntu远程连接MySQL(connection refused)解决方法

    一.判断ubuntu是否开启防火墙 sudo ufw status 开放防火墙3306端口 sudo ufw allow 3306 二.查看3306端口是否打开  注意:红色框框表示3306绑定的ip ...

  7. MySQL: Connection Character Sets and Collations

    character_set_server collation_servercharacter_set_databasecollation_database character_set_clientch ...

  8. mysql connection phase(未整理)

    14.2.1 初始握手初始握手从服务器发送 Initial_Handshake_Packet开始.在这之后,客户端可以选择是否通过SSL_Connection_Request_Packet发送SSL连 ...

  9. python使用mysql connection获取数据感知不到数据变化问题

    在做数据同步校验的时候,需要从mysql fetch数据和hbase的数据进行对比,发现即使mysql数据变化了,类似下面的代码返回的值还是之前的数据.抽取的代码大概如下: import MySQL ...

随机推荐

  1. 每日英语:He Diets, She Diets: More Weight-Loss Plans Target Men

    Weight-loss companies are becoming savvier about getting men to go on a diet. savvier:更加精明 Men and w ...

  2. ny714 Card Trick

    Card Trick 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 The magician shuffles a small pack of cards, holds ...

  3. laravel 代码维护, 使用php artisan使用应用程序处于维护状态

    当应用程序处于维护的时候,我们可以暂时关闭程序,具体的做使用是使用php artisan downartisan 是laravel根目录下的一个程序,当执行了这个命令时,会调用 app/start/g ...

  4. SparkStreaming操作Kafka

    Kafka为一个分布式的消息队列,spark流操作kafka有两种方式: 一种是利用接收器(receiver)和kafaka的高层API实现. 一种是不利用接收器,直接用kafka底层的API来实现( ...

  5. PLSQL Developer新手使用教程(图文教程)

    PLSQL Developer是Oracle数据库开发工具,很牛也很好用,PLSQL Developer功能很强大,可以做为集成调试器,有SQL窗口,命令窗口,对象浏览器和性能优化等功能,下面简单的介 ...

  6. LeetCode: Rotate List 解题报告

    Rotate List Given a list, rotate the list to the right by k places, where k is non-negative. For exa ...

  7. java 多线程6: 中断机制 优雅的终止java线程

    前文 java 多线程5: java 终止线程及中断机制 (stop().interrupt() .interrupted().isInterrupted()) 使用 interrupt() 和 in ...

  8. 【WPF】MVVM前台绑定一组RadioButton按钮

    需求:制作一组RadioButton,像下面这样的效果: [MVVM]要显示一组RadioButton按钮,想法是Controller层联网获取到数据后,将数据进行处理,然后加到一个Observabl ...

  9. sed: 1: “…”: invalid command code on Mac OS

    昨天因为项目中有很多文件的同一个变量需要批量替换成另一个,想用sed做这个.Linux 这样其实就可以了 ~# sed -i “s/string_old/string_new/g” grep -rl ...

  10. ansible unarchive模块

    unarchive模块:http://docs.ansible.com/ansible/unarchive_module.html 功能:解压缩,这个模块有两种用法: 1.将ansible主机上的压缩 ...