我有一个相当大的python3应用程序(20.000行),它大量使用SQLite数据库.它有一个Web-UI和API,这使得它有10个用于Web服务器的线程和2-3个其他线程.所有这些线程都可以写入数据库,因此可能存在一定的并发性.每个线程有一个数据库连接.
我的应用程序自启动以来一直存在的问题是,数据库有时会锁定(‘数据库已锁定’错误).据我所知,当两个连接想要写入数据库,但其中一个连接在另一个连接超时(等待写入)超时之前尚未提交其更改时,就会发生这种情况.
我注意到的奇怪之处是,有时我在应用程序启动后几秒钟内就会收到错误.我将我的超时设置为20秒(sqlite3.connect('database.db', timeout=20.0)
),但我会在应用程序启动大约2秒后收到错误.这怎么会发生呢?The documentation规定超时参数决定连接在放弃锁之前应该等待多长时间.那么,当我将值设置为20秒时,它怎么能在2秒后放弃呢?