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实现的各种排序算法代码
Mar 04 Python
Python采集腾讯新闻实例
Jul 10 Python
python win32 简单操作方法
May 25 Python
代码详解django中数据库设置
Jan 28 Python
Python第三方库h5py_读取mat文件并显示值的方法
Feb 08 Python
python opencv将图片转为灰度图的方法示例
Jul 31 Python
Linux下通过python获取本机ip方法示例
Sep 06 Python
python3.6、opencv安装环境搭建过程(图文教程)
Nov 05 Python
python修改文件内容的3种方法详解
Nov 15 Python
Python3爬虫关于识别检验滑动验证码的实例
Jul 30 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
Nov 09 Python
Python爬虫之爬取哔哩哔哩热门视频排行榜
Apr 28 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
成本8450万,票房仅2亿,口碑两极分化,又一部DC电影扑街了
2020/04/09 欧美动漫
WINDOWS 2000下使用ISAPI方式安装PHP
2006/09/05 PHP
利用discuz实现PHP大文件上传应用实例代码
2008/11/14 PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
2013/04/22 PHP
PHP解析html类库simple_html_dom的转码bug
2014/05/22 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
2015/04/21 PHP
关于js中alert弹出窗口文本换行问题简单详细说明
2012/12/11 Javascript
得到jQuery detach()后节点中的某个值实现代码
2013/02/05 Javascript
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
JS与jQuery遍历Table所有单元格内容的方法
2015/12/07 Javascript
javascript基本数据类型及类型检测常用方法小结
2016/12/14 Javascript
手把手搭建安装基于windows的Vue.js运行环境
2017/06/12 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
vue 路由页面之间实现用手指进行滑动的方法
2018/02/23 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
jQuery实现ajax的嵌套请求案例分析
2019/02/16 jQuery
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
JavaScript Array.flat()函数用法解析
2020/09/02 Javascript
[03:02]安得倚天剑,跨海斩长鲸——中国军团出征DOTA2国际邀请赛
2018/08/14 DOTA
[47:10]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第二场 12.16
2020/12/18 DOTA
Python反射的用法实例分析
2018/02/11 Python
python内置数据类型之列表操作
2018/11/12 Python
深入浅析python 协程与go协程的区别
2019/05/09 Python
django连接mysql数据库及建表操作实例详解
2019/12/10 Python
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
师范教师毕业鉴定
2014/01/13 职场文书
室内设计专业毕业生求职信
2014/05/02 职场文书
捐书倡议书
2014/08/29 职场文书
公司离职证明标准样本
2014/10/05 职场文书
2014年保密工作总结
2014/11/22 职场文书
志愿者服务活动总结报告
2015/05/06 职场文书
详细聊聊MySQL中慢SQL优化的方向
2021/08/30 MySQL
CSS 实现磨砂玻璃(毛玻璃)效果样式
2023/05/21 HTML / CSS