AttributeError: 'NoneType' object has no attribute 'read' 解決方案


最近想用多線程來提高我的代碼的執行效率,但是因為其中涉及到數據庫的讀寫,為了數據庫連接的線程安全,所以在網上沖浪后決定使用連接池的方式來取代之前普通數據庫連接的方式。有興趣的同學可以移步: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()
復制代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM