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 相关文章推荐
JPype实现在python中调用JAVA的实例
Jul 19 Python
Python实现mysql数据库更新表数据接口的功能
Nov 19 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
Apr 24 Python
python format 格式化输出方法
Jul 16 Python
python实现停车管理系统
Nov 30 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
Jun 14 Python
Python 3 使用Pillow生成漂亮的分形树图片
Dec 24 Python
Python3 Click模块的使用方法详解
Feb 12 Python
django的模型类管理器——数据库操作的封装详解
Apr 01 Python
Python判断三段线能否构成三角形的代码
Apr 12 Python
python利用递归方法实现求集合的幂集
Sep 07 Python
python 如何做一个识别率百分百的OCR
May 29 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
PHP操作Memcache实例介绍
2013/06/14 PHP
php输出金字塔的2种实现方法
2014/12/16 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
前端必学之PHP语法基础
2016/01/01 PHP
PHP实现的曲线统计图表示例
2016/11/10 PHP
thinkPHP多表查询及分页功能实现方法示例
2017/07/03 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
php工具型代码之印章抠图
2018/07/18 PHP
js 替换
2008/02/19 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
2013/06/24 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
Javascript技术栈中的四种依赖注入详解
2016/02/23 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
Vue.js的动态组件模板的实现
2018/11/26 Javascript
详解vue中axios的使用与封装
2019/03/20 Javascript
JavaScript实现横版菜单栏
2020/03/17 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
[50:50]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第一场 12.10
2020/12/13 DOTA
Python中property函数用法实例分析
2018/06/04 Python
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
python监控进程状态,记录重启时间及进程号的实例
2019/07/15 Python
Flask项目中实现短信验证码和邮箱验证码功能
2019/12/05 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
利用CSS3实现单选框动画特效示例代码
2016/09/26 HTML / CSS
美国环保婴儿用品公司:The Honest Company
2017/11/23 全球购物
For Art’s Sake官网:手工制作的奢华眼镜
2018/12/15 全球购物
安全生产先进个人材料
2014/02/06 职场文书
差生评语大全
2014/05/04 职场文书
祖国在我心中演讲稿400字
2014/05/04 职场文书
教师党员个人整改措施
2014/10/27 职场文书
谢师宴答谢词
2015/01/05 职场文书
mysql知识点整理
2021/04/05 MySQL
react合成事件与原生事件的相关理解
2021/05/13 Javascript
CSS3中Animation实现简单的手指点击动画的示例
2021/07/15 HTML / CSS