python多執行緒運算元據庫問題

2021-08-20 04:42:31 字數 2462 閱讀 3081

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

except exception as err:

conn.rollback()

return

finally:

cursor.close()

conn.close()

python 多執行緒運算元據庫

如果使用多執行緒運算元據庫,容易引起多使用者操作鎖表 operationalerror 2013,lost connection to mysql server during query 使用多執行緒時,出現鏈結伺服器消失的錯誤,在鏈結資料庫時,加入ping true 方法 1 conn mysql...

多執行緒運算元據庫

fmdb使用注意問題 1 匯入 導入庫 libsqlite3 2 多執行緒運算元據庫 fmdatabasequeue fmresultset rs db executequery sql,resourcename if rs next else rs close fmresultset 注意結果集的...

python運算元據庫

資料庫的操作在現在的python裡面已經變得十分的好用,有了一套api標準.下面的就是講講如何的去使用這套框架定義.此框架包含以下部分 connect parameters.其中的引數格式如下 dsn 資料來源名稱 user 使用者名稱 可選 password 密碼 可選 host 主機名 可選 d...