最近想用多線程來提高我的代碼的執行效率,但是因為其中涉及到數據庫的讀寫,為了數據庫連接的線程安全,所以在網上沖浪后決定使用連接池的方式來取代之前普通數據庫連接的方式。有興趣的同學可以移步:Python 使用DBUtils 創建連接池解決多線程中連接丟失的問題
但是在使用多線程操作數據庫連接池的過程中碰到下面這個問題
AttributeError: 'NoneType' object has no attribute 'read'
推測問題是,多線程操作數據庫連接的時候,相互交叉釋放了其他線程的連接。
解決方案是在獲取數據庫連接時加鎖,查詢完畢后釋放鎖
import threading lock = threading.Lock() lock.acquire() conn = pool.getConn() cur = conn.cursor() cur.execute(sql) rows = cur.fetchall() lock.release()