Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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 3.x 为什么sqlite db数据库在没有其他python进程同时写入的情况下被锁定?_Python 3.x_Sqlite - Fatal编程技术网

Python 3.x 为什么sqlite db数据库在没有其他python进程同时写入的情况下被锁定?

Python 3.x 为什么sqlite db数据库在没有其他python进程同时写入的情况下被锁定?,python-3.x,sqlite,Python 3.x,Sqlite,在这里,我看到默认超时是5秒。 我连接时没有指定超时。python 3.7 我有两个python进程,它们写入同一个数据库。此file.db处于WAL模式。我看到了两个文件-shm和-wal 我收到此异常sqlite3。错误:“数据库已锁定” 在发生此异常时,另一个进程已完成其事务,并已退出with context manager,并已使用signal.pause进入睡眠状态 该文件位于本地安装的常规硬盘驱动器上 除了做以下工作外,我如何调查正在发生的事情: 我可以在myfile.db上检查fu

在这里,我看到默认超时是5秒。 我连接时没有指定超时。python 3.7

我有两个python进程,它们写入同一个数据库。此file.db处于WAL模式。我看到了两个文件-shm和-wal

我收到此异常sqlite3。错误:“数据库已锁定”

在发生此异常时,另一个进程已完成其事务,并已退出with context manager,并已使用signal.pause进入睡眠状态 该文件位于本地安装的常规硬盘驱动器上

除了做以下工作外,我如何调查正在发生的事情:

我可以在myfile.db上检查fuser-v 我确实假设任何其他写入进程只在数据库执行事务时锁定数据库。一旦完成,它就会释放锁

此外,在WAL模式下,事情是否应该与文档不同 sqlite3模块在数据修改语言DML语句(即INSERT/UPDATE/DELETE/REPLACE)之前隐式打开事务,并在非DML、非查询语句i之前隐式提交事务。E除SELECT或上述内容之外的任何内容

在我的例子中,我只进行了一次更新,这意味着在此之前sqlite3插入了BEGIN,之后是signal.pause,这意味着我没有遇到非DML stmt,并且事务在睡眠之前仍然处于活动状态

另一个进程试图在第一个进程仍处于休眠状态且事务处于活动状态时运行更新


我在cli sqlite中添加了conn.commit before signal.pause

,我只是尝试更新一个表,我还发现数据库被锁定。有两个python进程以写模式fuser shows F打开了它。我知道python sqlite模块用一个事务包围了所有UPDATE语句。因此,在.execute返回后,事务就完成了,因此,如果进程由于signal.pause而处于休眠状态,它应该解锁数据库吗?