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版
Aug 12 Python
使用Python读取大文件的方法
Feb 11 Python
django多对多表的创建,级联删除及手动创建第三张表
Jul 25 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
Dec 25 Python
Pandas时间序列:重采样及频率转换方式
Dec 26 Python
Jupyter打开图形界面并画出正弦函数图像实例
Apr 24 Python
pycharm 2018 激活码及破解补丁激活方式
Sep 21 Python
Python爬虫实现HTTP网络请求多种实现方式
Jun 19 Python
python的flask框架难学吗
Jul 31 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
Aug 11 Python
详解Python 中的容器 collections
Aug 17 Python
利用python做表格数据处理
Apr 13 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 SQLite类
2009/05/07 PHP
关于页面优化和伪静态
2009/10/11 PHP
PHP 网络开发详解之远程文件包含漏洞
2010/04/25 PHP
JS 密码强度验证(兼容IE,火狐,谷歌)
2010/03/15 Javascript
jquery getScript动态加载JS方法改进详解
2012/11/15 Javascript
热点新闻滚动特效的js代码
2013/08/17 Javascript
Javascript改变CSS样式(局部和全局)
2013/12/18 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
jquery+html5制作超酷的圆盘时钟表
2015/04/14 Javascript
JavaScript实现随机替换图片的方法
2015/04/16 Javascript
js实现数组转换成json
2015/06/26 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
2016/12/23 Javascript
Angularjs添加排序查询功能的实例代码
2017/10/24 Javascript
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
基于react后端渲染模板引擎noox发布使用
2018/01/11 Javascript
详解JS中统计函数执行次数与执行时间
2018/09/04 Javascript
如何为vue的项目添加单元测试
2018/12/19 Javascript
jQuery实现鼠标移入显示蒙版效果
2020/01/11 jQuery
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
python冒泡排序算法的实现代码
2013/11/21 Python
python处理图片之PIL模块简单使用方法
2015/05/11 Python
Python实现的简单算术游戏实例
2015/05/26 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
pandas删除指定行详解
2019/04/04 Python
Django中间件基础用法详解
2019/07/18 Python
收藏!10个免费高清视频素材网站!【设计、视频剪辑必备】
2021/03/18 杂记
AVIS安飞士奥地利租车官网:提供奥地利、欧洲和全世界汽车租赁
2016/11/29 全球购物
美国非常受欢迎的Spa品牌:Bliss必列斯
2018/04/10 全球购物
设计师个人求职信范文
2014/02/02 职场文书
2014年教研活动总结范文
2014/04/26 职场文书
小学假期安全广播稿
2014/09/28 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
apache基于端口创建虚拟主机的示例
2021/04/24 Servers