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标准库sched模块使用指南
Jul 06 Python
Python协程的用法和例子详解
Sep 09 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
Feb 23 Python
python正则实现提取电话功能
Feb 24 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
Mar 13 Python
python 每天如何定时启动爬虫任务(实现方法分享)
May 21 Python
python 判断文件还是文件夹的简单实例
Jun 10 Python
python 批量修改 labelImg 生成的xml文件的方法
Sep 09 Python
python3-flask-3将信息写入日志的实操方法
Nov 12 Python
Pycharm 安装 idea VIM插件的图文教程详解
Feb 21 Python
Pytorch转tflite方式
May 25 Python
Python 如何创建一个线程池
Jul 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
PHP4之COOKIE支持详解
2006/10/09 PHP
php面向对象全攻略 (七) 继承性
2009/09/30 PHP
PHP+ajax 无刷新删除数据
2010/02/20 PHP
CodeIgniter记录错误日志的方法全面总结
2016/05/17 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
2018/05/28 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
PHP7内核CGI与FastCGI详解
2019/04/14 PHP
不能再简单的无闪刷新验证码原理很简单
2007/11/05 Javascript
jQuery中end()方法用法实例
2015/01/08 Javascript
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
在windows上用nodejs搭建静态文件服务器的简单方法
2016/08/11 NodeJs
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
2016/08/29 Javascript
Bootstrap基本组件学习笔记之分页(12)
2016/12/08 Javascript
Bootstrap的popover(弹出框)2秒后定时消失的实现代码
2017/02/27 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
使用Vuex实现一个笔记应用的方法
2018/03/13 Javascript
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
[01:03:54]Liquid vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
浅析Python中else语句块的使用技巧
2016/06/16 Python
python将音频进行变速的操作方法
2020/04/08 Python
容易被忽略的Python内置类型
2020/09/03 Python
使用CSS3制作响应式导航菜单的方法
2015/07/12 HTML / CSS
美国儿童玩具、装扮和玩偶商店:Magic Cabin
2018/09/02 全球购物
香港网上花店:FlowerAdvisor香港
2019/05/30 全球购物
Java基础类库面试题
2013/09/04 面试题
聚美优品励志广告词
2014/03/14 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
公司委托书范本
2014/04/04 职场文书
初中生庆国庆演讲稿范文2014
2014/09/25 职场文书
2014年大学班长工作总结
2014/11/14 职场文书
街道党风廉政建设调研报告
2015/01/01 职场文书
幼儿园教师求职信
2015/03/20 职场文书
2015年科室工作总结
2015/04/10 职场文书
人工作失职检讨书
2015/05/05 职场文书
2016党员读书思廉心得体会
2016/01/23 职场文书
《雪域豹影》读后感:父爱的伟大
2019/12/23 职场文书