从SQLite FAQ中,我知道:
多个进程可以同时打开同一个数据库。多个进程可以
SELECT
同时进行。但是,在任何时候,只有一个进程可以对数据库进行更改。
所以,据我了解,我可以:1)从多个线程读取DB(SELECT
)2)从多个线程读取DB( SELECT
)和write从单个线程(CREATE
,INSERT
,DELETE
)
但是,我读到有关预写日志记录的问题,它提供了更多的并发性,因为读者不会阻止作者,而作家也不会阻止读者。读写可以同时进行。
最后,当我找到它时,我已经完全糊涂了:
这是导致SQLITE_LOCKED错误的其他原因:
- 试图
CREATE
或DROP
表或索引而SELECT
声明仍悬而未决。- 当a
SELECT
在同一表上处于活动状态时,尝试写入该表。SELECT
如果未将sqlite设置为在多线程应用程序中尝试在同一表上同时执行两个操作。- 对数据库文件的fcntl(3,F_SETLK调用失败。例如,这可能是由NFS锁定问题引起的。针对此问题的一种解决方案是将DB移开,然后将其复制回来,使其具有新的Inode值
那么,我想为自己澄清一下,有必要避免锁吗?我可以同时从两个不同的线程读写吗?谢谢。
isolation_level=None
。没有共享缓存模式,如何在线程之间共享实例?