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实现服务器中只重载被修改的进程的方法
Apr 30 Python
Django框架中render_to_response()函数的使用方法
Jul 16 Python
python&MongoDB爬取图书馆借阅记录
Feb 05 Python
Python数据可视化正态分布简单分析及实现代码
Dec 04 Python
详解Python读取yaml文件多层菜单
Mar 23 Python
python使用pandas处理大数据节省内存技巧(推荐)
May 05 Python
django框架中间件原理与用法详解
Dec 10 Python
django使用F方法更新一个对象多个对象字段的实现
Mar 28 Python
获取python运行输出的数据并解析存为dataFrame实例
Jul 07 Python
简述python Scrapy框架
Aug 17 Python
vue.js刷新当前页面的实例讲解
Dec 29 Python
python 常用的异步框架汇总整理
Jun 18 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正确配置mysql(apache环境)
2011/08/28 PHP
怎样使用php与jquery设置和读取cookies
2013/08/08 PHP
YiiFramework入门知识点总结(图文教程)
2015/12/28 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
2019/08/05 PHP
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
Jquery 1.42 checkbox 全选和反选代码
2010/03/27 Javascript
JS等比例缩小图片尺寸的实例
2013/02/27 Javascript
jquery重复提交请求的原因浅析
2014/05/23 Javascript
js实现拖拽效果
2015/02/12 Javascript
javascript实现方法调用与方法触发小结
2016/03/26 Javascript
JavaScript代码性能优化总结(推荐)
2016/05/16 Javascript
浅谈jQuery中ajaxPrefilter的应用
2016/08/01 Javascript
基于JS实现checkbox全选功能实例代码
2016/10/31 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
2017/02/23 Javascript
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
JS实现为动态添加的元素增加事件功能示例【基于事件委托】
2018/03/21 Javascript
在react中使用vuex的示例代码
2018/07/30 Javascript
详解Ubuntu安装angular-cli遇到的坑
2018/09/08 Javascript
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
layui lay-verify form表单自定义验证规则详解
2019/09/18 Javascript
解决Angularjs异步操作后台请求用$q.all排列先后顺序问题
2019/11/29 Javascript
vue form表单post请求结合Servlet实现文件上传功能
2021/01/22 Vue.js
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
人工神经网络算法知识点总结
2019/06/11 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
2019/08/29 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
校本教研工作制度
2014/01/22 职场文书
学习标兵获奖感言
2014/02/20 职场文书
销售队伍口号
2014/06/11 职场文书
2015年世界水日活动总结
2015/02/09 职场文书
zabbix监控mysql的实例方法
2021/06/02 MySQL
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android