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使用urllib模块开发的多线程豆瓣小站mp3下载器
Jan 16 Python
python动态加载包的方法小结
Apr 18 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
May 24 Python
Python在线运行代码助手
Jul 15 Python
Python+request+unittest实现接口测试框架集成实例
Mar 16 Python
django ajax json的实例代码
May 29 Python
python ftp 按目录结构上传下载的实现代码
Sep 12 Python
对python读取CT医学图像的实例详解
Jan 24 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
Feb 26 Python
Python 解析库json及jsonpath pickle的实现
Aug 17 Python
解决jupyter notebook图片显示模糊和保存清晰图片的操作
Apr 24 Python
Jupyter Notebook内使用argparse报错的解决方案
Jun 03 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
多文件上载系统完整版
2006/10/09 PHP
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
在PHP3中实现SESSION的功能(三)
2006/10/09 PHP
php 数组的创建、调用和更新实现代码
2009/03/09 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
php中array_fill函数的实例用法
2021/03/02 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
Js放到HTML文件中的哪个位置有什么区别
2013/08/21 Javascript
LABjs、RequireJS、SeaJS的区别
2014/03/04 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
基于jquery实现发送文章到手机的代码
2014/12/26 Javascript
chrome浏览器如何断点调试异步加载的JS
2016/09/05 Javascript
JavaScript中常用的验证reg
2016/10/13 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
详解HTML5 使用video标签实现选择摄像头功能
2017/10/25 Javascript
Python魔术方法详解
2015/02/14 Python
Python的Bottle框架中获取制定cookie的教程
2015/04/24 Python
在Windows系统上搭建Nginx+Python+MySQL环境的教程
2015/12/25 Python
python实现简单遗传算法
2018/03/19 Python
python如何将两个txt文件内容合并
2019/10/18 Python
python logging设置level失败的解决方法
2020/02/19 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
波兰运动鞋网上商店:Distance.pl
2020/07/30 全球购物
老同学聚会感言
2014/02/23 职场文书
书香家庭事迹材料
2014/05/09 职场文书
2014年个人业务工作总结
2014/11/17 职场文书
机关保密工作承诺书
2015/05/04 职场文书
学校安全管理制度
2015/08/06 职场文书
2016关于读书活动的心得体会
2016/01/14 职场文书
python urllib库的使用详解
2021/04/13 Python