sqlite3“数据库已锁定”不会重试

2024-09-30 22:12:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个sqlite3数据库,可以通过几个线程(3-4)访问。我知道sqlite3在并发性方面的一般限制,如http://www.sqlite.org/faq.html#q6所述,但我确信这不是问题所在。

所有线程都从这个数据库读写。每当我写一篇文章时,我都有以下结构:

            try:
                Cursor.execute(q, params)
                Connection.commit()
            except sqlite3.IntegrityError:
                Notify
            except sqlite3.OperationalError:
                print sys.exc_info()
                print("DATABASE LOCKED; sleeping for 3 seconds and trying again")
                time.sleep(3)
                Retry

在某些运行中,我甚至不会命中此块,但当我这样做时,它永远不会出来(不断重试,但我不断从exc_info获取“database is locked”错误。如果我正确理解读写器锁的用法,那么一定的等待时间将有助于解决争用问题。这听起来像是死锁,但我不在代码中使用任何事务,而且每次选择或插入都是一次性的。但是,有些线程在执行操作时保持相同的连接(包括选择、插入和其他修饰符的混合)。

如果你能在这上面加上一个阴影,我会开价的,还有修复它的方法(除了使用不同的数据库引擎)


Tags: orginfo数据库httpsqlitehtmlwww文章