2011-06-09 46 views
0

我正在開發一個在多線程程序中使用Sqlite的python代碼。遠程主機調用一些xmlrpc函數並創建新線程。在新線程中運行的每個函數都使用sqlite將數據插入數據庫或從數據庫讀取數據。Python多線程Sqlite使用中的分段錯誤!

我的問題是,當同時調用服務器超過5次時,服務器會因「分段錯誤」而中斷。而輸出不提供任何其他信息。任何想法可能導致問題?

+0

我忘了提及每次創建新線程時都不打開/關閉連接。連接是全局的,所有線程都使用它。爲了達到性能目的,我這樣做。承諾花費這麼多時間! – masoudizzy 2011-06-09 08:10:45

+2

使連接池每個線程使用一個連接 – warvariuc 2011-06-09 08:36:28

回答

2

如果你讀了sqlite的文件(http://www.sqlite.org/threadsafe.html),你會看到,它說:

的SQLite支持三種不同的 線程模式:

單線程。在這種模式下,所有的 互斥鎖都被禁用,並且SQLite是 不安全,一次使用多個單獨的 線程。

多線程。在這種模式下,SQLite可以安全地使用 多線程 前提是沒有單個數據庫 連接在 兩個或多個線程中同時使用。

序列化。在串行模式下,SQLite 可以安全地用於多線程 而沒有任何限制。

因此,這將是你要麼在單線程模式,或在多線程模式和重用連接。重複使用連接僅在連續模式下安全(這很慢)

現在,Python文檔指出它不應該允許您共享連接。您是使用python-sqlite3模塊,還是與數據庫本地連接?

1

我的APSW模塊是線程安全的,您可以使用它。標準Python SQLite無法在多個線程中同時安全使用。