Python+SQLite數據庫實現服務端高並發寫入


本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理

本文章來自騰訊雲 作者:Python知識大全

想要學習Python?有問題得不到第一時間解決?來看看這里“1039649593”滿足你的需求,資料都已經上傳至文件中,可以自行下載!還有海量最新2020python學習資料。
點擊查看
在這里插入圖片描述

問題描述:

SQLite數據庫同一時刻只允許單個線程寫入,很多服務端程序會開很多線程,每個線程為一個客戶端服務,如果有多個客戶端同時發起寫入請求,在服務端會因為某個線程尚未寫入完成尚未解除對數據庫的鎖定而導致其他線程無法在限定的時間內完成寫入操作而拋出異常,提示“database is locked”。
在這里插入圖片描述
如果編寫高並發的服務端程序,一定要對數據庫的寫入操作進行有效管理,常用的方案有兩個:1)使用鎖機制使得多個線程競爭進入臨界區,確保同一時刻只有一個線程執行寫入數據庫的代碼;2)連接數據庫時設置參數timeout,設置當數據庫處於鎖定狀態時最長等待時間,sqlite3.connect()函數的參數timeout默認值為5秒,不適合服務端程序。但是參數timeout設置為多少更合適取決於具體的應用場景,雖然形式簡潔,但是不如第一種方法通用。

演示代碼如下,可以注釋掉兩種方案的代碼,多次運行程序觀察運行狀態。
在這里插入圖片描述


免責聲明!

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



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