揮発性SQLite3データベース(PRAGMA journal_mode = WAL
)に対してWrite-Ahead Logモードを有効にした後、私の同時性テストでこのエラーが発生し始めました。私は、Pythonプロセスがforkされ、WALモードのデータベースに接続が開いたままになっているときに、これが発生することを発見しました。そのデータベース上の任意の後続のは、新しい接続を使用しても、'locking protocol'
の例外をスローします。sqlite3.OperationalErrorの「ロックプロトコル」例外の原因?
WALモード(PRAGMA journal_mode = DELETE
)を無効にすると、問題が解消され、'database is locked'
エラーも発生しません。
SQLITE_PROTOCOL結果コードは、SQLiteのが使用するファイルロッキングプロトコルに問題があることを示している:
'locking protocol'
例外は、として記載されているの下SQLITE_PROTOCOLコードを反映すると思われます。
私はMac OS X 10.12.6 SierraでPython 2.7.10を使用しています。私はこの問題がPythonのsqlite3
モジュールであり、SQLite3自体の問題ではなく、フォークされていることをどのように処理するのかと考えています。私は今問題を回避する方法を知っていますが、主な質問ごとに、この問題の根本原因は何ですか?
P. - 私はスレッドを使用していないし、spawning a daemon childでフォークしています。
[FAQ](http://www.sqlite.org/faq.html#q6)です。 –