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连接mssql数据库编码问题解决方法
Jan 01 Python
Python实现脚本锁功能(同时只能执行一个脚本)
May 10 Python
Python下调用Linux的Shell命令的方法
Jun 12 Python
numpy中矩阵合并的实例
Jun 15 Python
Sanic框架安装与简单入门示例
Jul 16 Python
python用opencv批量截取图像指定区域的方法
Jan 24 Python
python如何制作缩略图
Apr 30 Python
Python openpyxl读取单元格字体颜色过程解析
Sep 03 Python
python匿名函数的使用方法解析
Oct 10 Python
解决keras模型保存h5文件提示无此目录问题
Jul 01 Python
无需压缩软件,用python帮你操作压缩包
Aug 17 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
Jan 27 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
咖啡知识 咖啡养豆要养多久 排气又是什么
2021/03/06 新手入门
PHP 学习路线与时间表
2010/02/21 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
8个PHP数组面试题
2015/06/23 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
2013/01/04 Javascript
jQuery简易图片放大特效示例代码
2014/06/09 Javascript
Jquery实现仿腾讯微博发表广播
2014/11/17 Javascript
浅谈JavaScript中的string拥有方法的原因
2015/08/28 Javascript
js中实现字符串和数组的相互转化详解
2016/01/24 Javascript
JavaScript基于原型链的继承
2016/06/22 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
微信小程序 swiper组件详解及实例代码
2016/10/25 Javascript
解决vue2.0路由跳转未匹配相应用路由避免出现空白页面的问题
2018/08/24 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
基于Vue CSR的微前端实现方案实践
2020/05/27 Javascript
jQuery实现回到顶部效果
2020/10/19 jQuery
[33:09]完美世界DOTA2联赛循环赛 Forest vs DM BO2第二场 10.29
2020/10/29 DOTA
探寻python多线程ctrl+c退出问题解决方案
2014/10/23 Python
pandas 对每一列数据进行标准化的方法
2018/06/09 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
python从zip中删除指定后缀文件(推荐)
2019/12/05 Python
Pytorch之finetune使用详解
2020/01/18 Python
Python内置类型性能分析过程实例
2020/01/29 Python
基于matplotlib xticks用法详解
2020/04/16 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
2021/03/03 Python
利用Canvas模仿百度贴吧客户端loading小球的方法示例
2017/08/13 HTML / CSS
HTML5 Web存储方式的localStorage和sessionStorage进行数据本地存储案例应用
2012/12/09 HTML / CSS
用html5的canvas和JavaScript创建一个绘图程序的简单实例
2016/07/06 HTML / CSS
SmartBuyGlasses台湾:名牌眼镜,名牌太阳眼镜及隐形眼镜
2017/01/04 全球购物
集团公司人力资源部岗位职责
2014/01/03 职场文书
校园歌咏比赛主持词
2014/03/18 职场文书
煤矿安全生产标语
2014/06/06 职场文书
公司自我介绍演讲稿
2014/08/21 职场文书
2014幼儿园教师师德师风演讲稿
2014/09/10 职场文书
2015年防灾减灾工作总结
2015/07/24 职场文书