Python基于多线程操作数据库相关问题分析


Posted in Python onJuly 11, 2018

本文实例分析了Python多线程操作数据库相关问题。分享给大家供大家参考,具体如下:

python多线程并发操作数据库,会存在链接数据库超时、数据库连接丢失、数据库操作超时等问题。

解决方法:使用数据库连接池,并且每次操作都从数据库连接池获取数据库操作句柄,操作完关闭连接返回数据库连接池。

*连接数据库需要设置charset = 'utf8', use_unicode = True,不然会报中文乱码问题

*网上说解决python多线程并发操作数据库问题,连接时使用self.conn.ping(True)(检查并保持长连接),但是我这边亲测无法解决,建议还是使用数据库连接池

python多线程代码:

import threading
class MyThread(threading.Thread):
  def __init__(self, name, count, exec_object):
    threading.Thread.__init__(self)
    self.name = name
    self.count = count
    self.exec_object = exec_object
  def run(self):
    while self.count >= 0:
      count = count - 1
      self.exec_object.execFunc(count)
thread1 = MyThread('MyThread1', 3, ExecObject())
thread2 = MyThread('MyThread2', 5, ExecObject())
thread1.start()
thread2.start()
thread1.join() # join方法 执行完thread1的方法才继续主线程
thread2.join() # join方法 执行完thread2的方法才继续主线程
# 执行顺序 并发执行thread1 thread2,thread1和thread2执行完成才继续执行主线程
# ExecObject类是自定义数据库操作的业务逻辑类
#
########join方法详解########
thread1 = MyThread('MyThread1', 3, ExecObject())
thread2 = MyThread('MyThread2', 5, ExecObject())
thread1.start()
thread1.join() # join方法 执行完thread1的方法才继续主线程
thread2.start()
thread2.join() # join方法 执行完thread2的方法才继续主线程
# 执行顺序 先执行thread1,执行完thread1再执行thread2,执行完thread2才继续执行主线程

mysql数据库连接池代码:

import MySQLdb
from DBUtils.PooledDB import PooledDB
class MySQL:
  host = 'localhost'
  user = 'root'
  port = 3306
  pasword = ''
  db = 'testDB'
  charset = 'utf8'
  pool = None
  limit_count = 3 # 最低预启动数据库连接数量
  def __init__(self):
    self.pool = PooledDB(MySQLdb, self.limit_count, host = self.host, user = self.user, passwd = self.pasword, db = self.db,
      port = self.port, charset = self.charset, use_unicode = True)
  def select(self, sql):
    conn = self.pool.connection()
    cursor = conn.cursor()
    cursor.execute(sql)
    result = cursor.fetchall()
    cursor.close()
    conn.close()
    return result
  def insert(self, table, sql):
    conn = self.pool.connection()
    cursor = conn.cursor()
    try:
      cursor.execute(sql)
      conn.commit()
      return {'result':True, 'id':int(cursor.lastrowid)}
    except Exception as err:
      conn.rollback()
      return {'result':False, 'err':err}
    finally:
      cursor.close()
      conn.close()

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python实现的一只从百度开始不断搜索的小爬虫
Aug 13 Python
Python实现二维有序数组查找的方法
Apr 27 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
May 28 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
Oct 11 Python
python实现字符串连接的三种方法及其效率、适用场景详解
Jan 13 Python
Python 字符串换行的多种方式
Sep 06 Python
python pandas写入excel文件的方法示例
Jun 25 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
Apr 13 Python
Python unittest单元测试框架实现参数化
Apr 29 Python
Python如何对XML 解析
Jun 28 Python
如何在python中判断变量的类型
Jul 29 Python
python opencv通过4坐标剪裁图片
Jun 05 Python
pandas 按照特定顺序输出的实现代码
Jul 10 #Python
Python OpenCV处理图像之图像直方图和反向投影
Jul 10 #Python
Python中 map()函数的用法详解
Jul 10 #Python
python 读取视频,处理后,实时计算帧数fps的方法
Jul 10 #Python
Python OpenCV处理图像之图像像素点操作
Jul 10 #Python
查找python项目依赖并生成requirements.txt的方法
Jul 10 #Python
Python OpenCV处理图像之滤镜和图像运算
Jul 10 #Python
You might like
10 个经典PHP函数
2013/10/17 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
2019/10/17 PHP
发现的以前不知道的函数
2006/09/19 Javascript
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
jquery插件珍藏(图片局部放大/信息提示框)
2013/01/08 Javascript
angularJS中$apply()方法详解
2015/01/07 Javascript
javascript实现字符串反转的方法
2015/02/05 Javascript
jquery获取url参数及url加参数的方法
2015/10/26 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
使用vue.js制作分页组件
2016/06/27 Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
2016/07/07 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
Bootstrap CSS使用方法
2016/12/23 Javascript
JavaScript中最常见的三个面试题解析
2017/03/04 Javascript
原生JS实现圣旨卷轴展开效果
2017/03/06 Javascript
jQuery实现简单的回到顶部totop功能示例
2017/10/16 jQuery
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
2019/03/28 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
2020/05/30 jQuery
JavaScript实现像雪花一样的Hexaflake分形
2020/07/07 Javascript
为什么str(float)在Python 3中比Python 2返回更多的数字
2018/10/16 Python
Pandas+Matplotlib 箱式图异常值分析示例
2019/12/09 Python
Python编程快速上手——PDF文件操作案例分析
2020/02/28 Python
解决python调用自己文件函数/执行函数找不到包问题
2020/06/01 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
预订奥兰多和佛罗里达州公园门票:FloridaTix
2018/01/03 全球购物
Expedia韩国官网:亚洲发展最快的在线旅游门户网站
2018/02/26 全球购物
庆六一活动总结
2014/08/29 职场文书
信息与工商管理职业规划范文:为梦想而搏击
2014/09/11 职场文书
优秀班组申报材料
2014/12/25 职场文书
求职简历自我评价范文
2015/03/10 职场文书
热爱劳动主题班会
2015/08/14 职场文书
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL