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 解析XML文件
Apr 15 Python
树莓派中python获取GY-85九轴模块信息示例
Dec 05 Python
详解Python中__str__和__repr__方法的区别
Apr 17 Python
Python 多线程实例详解
Mar 25 Python
Python如何生成树形图案
Jan 03 Python
Python解析Excle文件中的数据方法
Oct 23 Python
Python人脸识别第三方库face_recognition接口说明文档
May 03 Python
Python 计算任意两向量之间的夹角方法
Jul 05 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
Aug 05 Python
pytorch 实现查看网络中的参数
Jan 06 Python
Python接收手机短信的代码整理
Aug 02 Python
Python中免验证跳转到内容页的实例代码
Oct 23 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
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
PHP实现视频文件上传完整实例
2014/08/28 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
2015/03/05 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
2019/01/17 PHP
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
jQuery动画效果-slideUp slideDown上下滑动示例代码
2013/08/28 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
Angularjs2不同组件间的通信实例代码
2017/05/06 Javascript
React入门教程之Hello World以及环境搭建详解
2017/07/11 Javascript
JS倒计时实例_天时分秒
2017/08/22 Javascript
Vue.js实现实例搜索应用功能详细代码
2017/08/24 Javascript
webpack 静态资源集中输出的方法示例
2018/11/09 Javascript
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
[01:09:19]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第二场 2月28日
2021/03/11 DOTA
python实现连接mongodb的方法
2015/05/08 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
python 爬虫 批量获取代理ip的实例代码
2018/05/22 Python
Python高斯消除矩阵
2019/01/02 Python
Python后台管理员管理前台会员信息的讲解
2019/01/28 Python
PowerBI和Python关于数据分析的对比
2019/07/11 Python
详解python实现交叉验证法与留出法
2019/07/11 Python
Pandas中DataFrame的分组/分割/合并的实现
2019/07/16 Python
Python3中对json格式数据的分析处理
2021/01/28 Python
德国著名廉价网上药店:Shop-Apotheke
2017/07/23 全球购物
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
几个Linux面试题笔试题
2012/12/01 面试题
政法学院毕业生求职信
2014/02/28 职场文书
劳动工资科岗位职责范本
2014/03/02 职场文书
社区健康教育实施方案
2014/03/18 职场文书
《他得的红圈圈最多》教学反思
2014/04/24 职场文书
全国税务系统先进集体事迹材料
2014/05/19 职场文书
单位接收函格式
2015/01/30 职场文书
sql server删除前1000行数据的方法实例
2021/08/30 SQL Server