您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關怎么分析pymysql非線程安全導致的故障,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據(jù)這篇文章可以有所收獲。
mysqldb 這個python 驅動只支持到 python 2 .
轉到python 3 后. 無法使用了.
啟用 pymysql 這個驅動.
在投入生產后, 發(fā)現(xiàn)了一些問題.
在使用較大規(guī)模的 for id in [list]:
db.query (xxxxxxxxx)
查詢數(shù)據(jù)庫的時候, 出現(xiàn)了一些比較奇怪的網(wǎng)絡連接層面的報錯.
數(shù)據(jù)報 的 頭字節(jié) 格式錯誤.
如果只是執(zhí)行單個查詢則是不會報錯.
經(jīng)過排查, 發(fā)現(xiàn)這是pymysql 的bug 或者缺陷.
即 PYmysql 不是線程安全的. 由于我們自己的組件 dba模塊.
對數(shù)據(jù)庫查詢做了包裝.
導致 在某些情況情況下. python 的代碼優(yōu)化模塊.
對代碼的優(yōu)化, 出現(xiàn)了并行的情況.
即前一個sql 查詢沒有返回的情況下, 另一個線程啟動了并從同一個數(shù)據(jù)庫句柄讀取數(shù)據(jù).
導致了 數(shù)據(jù)報的格式錯誤.
改進方案:
1. 對數(shù)據(jù)庫的連接 增加線程鎖.
每一次查詢 都加鎖. 在異常處理中也要同時加上解鎖代碼.
2. 更換為mysql.com 提供的 官方的 mysql-connector-python 驅動. 目前沒有發(fā)現(xiàn)問題.
看完上述內容,你們對怎么分析pymysql非線程安全導致的故障有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。