国产探花免费观看_亚洲丰满少妇自慰呻吟_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()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 毕节市| 宁国市| 城口县| 宜黄县| 焉耆| 九龙坡区| 筠连县| 万州区| 吉安市| 临城县| 常州市| 石阡县| 永泰县| 静乐县| 吉木萨尔县| 延边| 遵义市| 榆社县| 敦煌市| 晋宁县| 洪洞县| 五莲县| 吴堡县| 台安县| 中方县| 洛隆县| 福海县| 久治县| 贡山| 莆田市| 长治县| 象山县| 彭泽县| 含山县| 普定县| 尼勒克县| 怀远县| 鹤峰县| 乡城县| 科技| 通化市|