国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python基于多線程操作數據庫相關問題分析

2020-02-15 22:19:54
字體:
來源:轉載
供稿:網友

本文實例分析了Python多線程操作數據庫相關問題。分享給大家供大家參考,具體如下:

python多線程并發操作數據庫,會存在鏈接數據庫超時、數據庫連接丟失、數據庫操作超時等問題。

解決方法:使用數據庫連接池,并且每次操作都從數據庫連接池獲取數據庫操作句柄,操作完關閉連接返回數據庫連接池。

*連接數據庫需要設置charset = 'utf8', use_unicode = True,不然會報中文亂碼問題

*網上說解決python多線程并發操作數據庫問題,連接時使用self.conn.ping(True)(檢查并保持長連接),但是我這邊親測無法解決,建議還是使用數據庫連接池

python多線程代碼:

import threadingclass 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 MySQLdbfrom DBUtils.PooledDB import PooledDBclass 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()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 罗甸县| 斗六市| 财经| 丰城市| 丰宁| 香格里拉县| 尉犁县| 宜阳县| 扶绥县| 泽州县| 弥渡县| 房山区| 沐川县| 大足县| 阿尔山市| 会昌县| 诸暨市| 肥乡县| 兴业县| 吴川市| 承德市| 开平市| 肃宁县| 图们市| 页游| 洛扎县| 凭祥市| 全南县| 蒙自县| 天祝| 乌兰察布市| 杭锦后旗| 得荣县| 陕西省| 乐陵市| 湖南省| 海门市| 杭州市| 深水埗区| 汤原县| 通海县|