1. # coding:utf-8
  2. import threading
  3.  
  4. import pymysql
  5. from DBUtils.PooledDB import PooledDB
  6.  
  7. from app.common.file_config import get_config
  8.  
  9. class DbPool(object):
  10. _instance_lock = threading.Lock()
  11.  
  12. def __init__(self):
  13. if not hasattr(DbPool, "pool"):
  14. DbPool.mysql_pool()
  15. else:
  16. pass
  17.  
  18. def __new__(cls, *args, **kwargs):
  19. if not hasattr(DbPool, "_instance"):
  20. with DbPool._instance_lock:
  21. if not hasattr(DbPool, "_instance"):
  22. DbPool._instance = object.__new__(cls, *args, **kwargs)
  23. return DbPool._instance
  24.  
  25. @staticmethod
  26. def mysql_pool():
  27. host = get_config('database', 'MYSQL_HOST')
  28. port = int(get_config('database', 'MYSQL_PORT'))
  29. user = get_config('database', 'MYSQL_USERNAME')
  30. passwd = get_config('database', 'MYSQL_PASSWORD')
  31. db = get_config('database', 'MYSQL_DB')
  32. DbPool.pool = PooledDB(
  33. creator=pymysql, # 使用链接数据库的模块
  34. mincached=2, # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
  35. maxcached=6, # 链接池中最多闲置的链接,0和None不限制
  36. maxshared=3,
  37. # 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。
  38. maxconnections=8, # 连接池允许的最大连接数,0和None表示不限制连接数
  39. blocking=True, # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
  40. maxusage=None, # 一个链接最多被重复使用的次数,None表示无限制
  41. setsession=None, # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]
  42. # ping MySQL服务端,检查是否服务可用。# 如:0 = None = never, 1 = default = whenever it is requested, 2 = when a cursor is created, 4 = when a query is executed, 7 = always
  43. host=host,
  44. port=port,
  45. user=user,
  46. passwd=passwd,
  47. db=db,
  48. use_unicode=False,
  49. charset='utf8'
  50. )

Python下Mysql数据连接池——单例的更多相关文章

  1. Tomcat 下 mysql的连接池配置和使用

    最近维护的一个项目出了问题,最后分析是卡在数据库连接池上,然后就做了些学习. 先把我自己的方法写出来,再说下网上其他的没有成功的方法. 1.首先当然是先把mysql的jar包放在lib目录下,tonc ...

  2. python全栈开发day113-DBUtils(pymysql数据连接池)、Request管理上下文分析

    1.DBUtils(pymysql数据连接池) import pymysql from DBUtils.PooledDB import PooledDB POOL = PooledDB( creato ...

  3. SpringBoot整合Druid数据连接池

    SpringBoot整合Druid数据连接池 Druid是什么? Druid是Alibaba开源的的数据库连接池.Druid能够提供强大的监控和扩展功能. 在哪里下载druid maven中央仓库: ...

  4. 记录一个简单的dbcp数据连接池

    这个示例用到了ThreadLocal与dbcp,我觉得有点意思,就整理了下.使用dbcp,肯定要导入commons-dbcp.jar包.下面直接贴DBUtil代码: public class DBUt ...

  5. Python和mysql的连接

    python与mysql的连接: 说明:前提是已近安装了mysql以及可视化工具(本人装的是Navicat) 1.在cmd下下载Python的第三方数据库包:pip install pymysql: ...

  6. Netbeans 中创建数据连接池和数据源步骤(及解决无法ping通问题)

    1.启动glassfish服务器, 在浏览器的地址栏中输入 http://localhost:4848 2.首先建立JDBC Connection Pools: 3.new 一个Connectio P ...

  7. 数据连接池——JNDI

    数据库连接有很多中方式,JDBC数据库的连接方式,前边我们已经介绍过了,而开发中我们经常使用的是DataBaseConnectionPool(数据库连接池,DBCP).数据库连接池到底是什么?它比jd ...

  8. Node.js使用MySQL的连接池

    使用Nodejs+MySQL肯定比PHP和MySQL的组合更适合做服务器端的开发. 使用Nodejs你会从他的异步行为中获益良多.比如,提升性能,你无须在从已有的MySQL数据库迁移到其他的NoSQL ...

  9. [nodejs]解决mysql和连接池(pool)自动断开问题

    最近在做一个个人项目,数据库尝试使用了mongodb.sqlite和mysql.分享一下关于mysql的连接池用法.项目部署于appfog,项目中我使用连接池链接数据库,本地测试一切正常.上线以后,经 ...

随机推荐

  1. IOException while loading persisted sessions: java.io.EOFException

    运行eclipse启动服务器的时候,出现了IOException while loading persisted sessions: java.io.EOFException报错.本以为是代码修改出现 ...

  2. Java Script 脚本的几种基本格式:

    1. <script>       document.Write("Hello wrrld!!!");     </script> 2. <scrip ...

  3. ASP.NET MVC Controller 编程所涉及到的常用属性成员

    Controller (System.Web.Mvc.Controller) 1.获取路由中的各个值 Request.RequestContext.RouteData.Values["id& ...

  4. angular Docheck

    import { Component, OnInit, Input, OnChanges, SimpleChanges, DoCheck } from '@angular/core'; @Compon ...

  5. angular 守卫路由

    import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; im ...

  6. thedao

    TheDao 简化版解释 the Dao 合约 contract f1{ function transfer() { if (acccount[m]>=100) { m.send(100) ac ...

  7. c++实现多叉树树形显示(适合家谱的显示)

    多叉树(左兄弟右孩子二叉树)的树形显示 核心代码 void positionadd(Multiway_tree*root, int n) { if (!root)return; Multiway_tr ...

  8. Tensorflow报错:InvalidArgumentError: You must feed a value for placeholder tensor 'input_y' with dtype

    此错误神奇之处是每次第一次运行不会报错,第二次.第三次第四次....就都报错了.关掉重启,又不报错了,运行完再运行一次立马报错!搞笑! 折磨了我半天,终于被我给解决了! 问题解决来源于这边博客:htt ...

  9. linux获取域名地址

    dig live-195887137.cn-north-1.elb.amazonaws.com.cn +short

  10. 基于CAS的单点登录实战(1)-- 搭建cas服务器

    公司有几个系统想做SSO,然后开始研究cas.系统是Centos7 搭建CAS服务器 cas的版本比较多,先在网上搜了一下各种教程配置经验.本来想搭建最新的CAS版本,然而为了快速部署,选择了网上教程 ...