使用twisted.enterprise.adbapi处理'数据库被锁定'错误的正确和最佳方法

时间:2014-05-03 09:52:44

标签: python multithreading sqlite twisted

我正在使用twisted.enterprise.adbapi和sqlite3数据库适配器以及“runInteraction()”。

我继续得到“sqlite3.OperationalError:数据库被锁定”错误。 我理解这个问题,多个线程尝试访问数据库,并且它已经被一个线程锁定,它引发了这个异常。我的问题是处理这个问题的标准/正确扭曲方式是什么?

我已在这里找到答案: http://twistedmatrix.com/pipermail/twisted-python/2009-June/019848.html

但是不限制连接池到一个连接会减慢长查询的整个应用程序? 它仍然无法解决从两个应用程序访问数据库的问题。

你能想到更好的方法吗?

King问候,弗洛里安。

1 个答案:

答案 0 :(得分:1)

  

但是,如果没有将连接池限制为一个连接,那么长时间查询会使整个应用程序变慢?

SQLite不允许并发连接;不是来自同一个过程,也不是来自不同的过程;它在数据库中维护一个锁定标志,以便在一个进程仍在使用时专门阻止其他进程使用该数据库文件。如果您的查询速度较慢,则会阻止其他连接,如果它们正在进行中或其他情况下并不重要。

如果这是一个问题,解决方案很简单,不要使用sqlite。