Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sqlite3.0错误的原因“;锁定协议;例外?_Python_Sqlite - Fatal编程技术网

Python sqlite3.0错误的原因“;锁定协议;例外?

Python sqlite3.0错误的原因“;锁定协议;例外?,python,sqlite,Python,Sqlite,为易失性SQLite3数据库(PRAGMA journal\u mode=WAL)启用模式后,我的并发测试开始引发此错误。我发现,当Python进程分叉,并且在WAL模式下打开与数据库的连接时,就会发生这种情况。在该数据库上的任何后续execute(),即使使用新连接,也会抛出此锁定协议“异常 禁用WAL模式(PRAGMA journal\u mode=DELETE)会使问题消失,也不会出现任何“数据库已锁定”错误。“锁定协议”异常似乎反映了以下代码: SQLITE_协议结果代码表示SQLITE

为易失性SQLite3数据库(
PRAGMA journal\u mode=WAL
)启用模式后,我的并发测试开始引发此错误。我发现,当Python进程分叉,并且在WAL模式下打开与数据库的连接时,就会发生这种情况。在该数据库上的任何后续
execute()
,即使使用新连接,也会抛出此
锁定协议“
异常

禁用WAL模式(
PRAGMA journal\u mode=DELETE
)会使问题消失,也不会出现任何
“数据库已锁定”
错误。
“锁定协议”
异常似乎反映了以下代码:

SQLITE_协议结果代码表示SQLITE使用的文件锁定协议存在问题

我正在Mac OS X 10.12.6上使用Python 2.7.10。我认为问题在于Python的
sqlite3
模块以及如何处理分叉,而不是sqlite3本身的问题。我现在知道如何解决这个问题,但根据主要问题,这个问题的根本原因是什么?


另外,我没有使用任何线程,并且正在使用分叉。

SQLite3显然不是线程安全的,但是,正如在对我的问题的评论中指出的,有一行代码与分叉相关:

在Unix下,不应通过fork()系统调用将打开的SQLite数据库带到子进程中

这并不能确切地回答原因,但它确实指出了一个解决方案:在
fork()
进程中(或之前)关闭所有SQLite连接!保持分叉连接可防止在任何过程中发生新连接

这是一个很好的例子。