激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python基于多線程操作數據庫相關問題分析

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

2021-03-15 00:40CyborgLin Python

這篇文章主要介紹了Python基于多線程操作數據庫相關問題,結合實例形式分析了Python使用數據庫連接池并發操作數據庫避免超時、連接丟失相關實現技巧,需要的朋友可以參考下

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

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

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

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

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

python多線程代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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數據庫連接池代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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程序設計有所幫助。

原文鏈接:https://blog.csdn.net/mxdzchallpp/article/details/80411514

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 日韩av有码在线 | 欧美一级做性受免费大片免费 | 精品成人av一区二区在线播放 | 黄色网址免费入口 | 被摁着灌浓精囚禁高h1v1 | 欧美人与牲禽动交精品一区 | 色吧久久| 色视频在线 | 欧美性色生活片免费播放 | 久久免费精品 | 午夜影视一区二区 | 黄色片免费在线 | 国产一级毛片视频在线! | 成人在线免费观看小视频 | 特黄一级小说 | 久久久久久久久久久久99 | 国产精品久久77777 | 麻豆蜜桃在线观看 | 在线观看精品视频 | 久久国产28 | 亚洲一级电影在线观看 | 视频一区二区三区在线播放 | 毛片在线免费观看网址 | 九九热精彩视频 | 二区三区偷拍浴室洗澡视频 | 亚洲一区 国产 | 免费放黄网站在线播放 | 国产精品成人一区二区三区电影毛片 | 美女网站色免费 | 欧美亚洲免费 | 深夜免费视频 | fc2成人免费人成在线观看播放 | 国产亚洲精品综合一区91 | 国产午夜精品久久久久久免费视 | 99视频有精品视频高清 | 九色 在线 | 午夜在线成人 | 成人羞羞网站入口 | 欧洲a级片 | 91高清在线免费观看 | 加勒比婷婷色综合久久 |