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 相关文章推荐
Python3基础之输入和输出实例分析
Aug 18 Python
Python标准库内置函数complex介绍
Nov 25 Python
python中字典(Dictionary)用法实例详解
May 30 Python
Python上下文管理器和with块详解
Sep 09 Python
Python学习之Anaconda的使用与配置方法
Jan 04 Python
Python使用itertools模块实现排列组合功能示例
Jul 02 Python
python多线程并发让两个LED同时亮的方法
Feb 18 Python
python实现维吉尼亚算法
Mar 20 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
Feb 07 Python
如何使用PyCharm引入需要使用的包的方法
Sep 22 Python
Python结合百度语音识别实现实时翻译软件的实现
Jan 18 Python
python实现ROA算子边缘检测算法
Apr 05 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开发大型项目的一点经验
2006/10/09 PHP
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
jQuery TextBox自动完成条
2009/07/22 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
使用jQuery.fn自定义jQuery翻页插件
2013/01/20 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
浅谈类似于(function(){}).call()的js语句
2015/03/30 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
2015/10/29 Javascript
AngularJS 应用身份认证的技巧总结
2016/11/07 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
Vuejs实现带样式的单文件组件新方法
2017/05/02 Javascript
javaScript动态添加Li元素的实例
2018/02/24 Javascript
使用javascript做在线算法编程
2018/05/25 Javascript
详解原生JS回到顶部
2019/03/25 Javascript
JS实现普通轮播图特效
2020/01/01 Javascript
解决vue项目本地启动时无法携带cookie的问题
2021/02/06 Vue.js
Python中if __name__ == "__main__"详细解释
2014/10/21 Python
python+Django+apache的配置方法详解
2016/06/01 Python
利用Python查看目录中的文件示例详解
2017/08/28 Python
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
Python3爬虫使用Fidder实现APP爬取示例
2018/11/27 Python
python实现kmp算法的实例代码
2019/04/03 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
2020/04/17 Python
python实现画图工具
2020/08/27 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
AmazeUI导航的示例代码
2020/08/14 HTML / CSS
软件测试工程师笔试题带答案
2015/03/27 面试题
JAVA高级程序员面试题
2013/09/06 面试题
销售类求职信
2014/06/13 职场文书
年检委托书
2014/08/30 职场文书
2015年消防工作总结
2015/04/24 职场文书
自我检讨书怎么写
2015/05/07 职场文书
初中家长意见
2015/06/03 职场文书
springboot layui hutool Excel导入的实现
2022/03/31 Java/Android