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动态监控日志内容的示例
Feb 16 Python
Python实现抓取百度搜索结果页的网站标题信息
Jan 22 Python
Python实现带百分比的进度条
Jun 28 Python
python3写的简单本地文件上传服务器实例
Jun 04 Python
Python爬虫实现(伪)球迷速成
Jun 10 Python
使用pycharm在本地开发并实时同步到服务器
Aug 02 Python
python控制台实现tab补全和清屏的例子
Aug 20 Python
Python 根据数据模板创建shapefile的实现
Nov 26 Python
如何基于python实现归一化处理
Jan 20 Python
PyTorch中的C++扩展实现
Apr 02 Python
python urllib和urllib3知识点总结
Feb 08 Python
python编写扎金花小程序的实例代码
Feb 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
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
2009/10/15 PHP
PHP实现通过中文字符比率来判断垃圾评论的方法
2014/10/20 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
Yii2语言国际化的配置教程
2018/08/19 PHP
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
JavaScript 闭包在封装函数时的简单分析
2009/11/28 Javascript
javascript表单验证和Window详解
2014/12/11 Javascript
学习JavaScript设计模式之代理模式
2016/01/12 Javascript
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
javascript输出AscII码扩展集中的字符方法
2016/12/26 Javascript
JS实现数组去重方法总结(六种方法)
2017/07/14 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
Vue 页面跳转不用router-link的实现代码
2018/04/12 Javascript
用Node提供静态文件服务的方法
2018/07/06 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
JS实现网页端猜数字小游戏
2020/03/06 Javascript
创建与框架无关的JavaScript插件
2020/12/01 Javascript
介绍Python中的__future__模块
2015/04/27 Python
简单学习Python time模块
2016/04/29 Python
python中文件变化监控示例(watchdog)
2017/10/16 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
澳大利亚领先的武术用品和健身器材供应商:SMAI
2019/03/24 全球购物
期中考试后的反思
2014/02/08 职场文书
师范生自荐信模板
2014/05/28 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
2015年城管个人工作总结
2015/05/15 职场文书
2016高考寄语集锦
2015/12/04 职场文书
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android