python - 使用 twisted.enterprise.adbapi 处理 'database is locked' 错误的正确和最佳方法

标签 python multithreading sqlite twisted

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

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

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

但是,将连接池限制为一个连接不会降低整个应用程序在长查询时的速度吗? 它仍然没有解决从两个应用程序访问数据库的问题。

你能想到更好的方法吗?

国王问候,弗洛里安。

最佳答案

But doesn't limiting the connection pool to one connection slow down the whole application on long queries?

SQLite 不允许并发连接;不是来自同一个进程,也不是来自不同的进程;它在数据库中维护一个锁定标志,以专门防止其他进程在一个进程仍在使用该数据库文件时使用它。如果您的查询速度很慢,它会阻塞其他连接,无论它们是否正在处理中都没有关系。

如果那是个问题,解决方法很简单,不要使用 sqlite。

关于python - 使用 twisted.enterprise.adbapi 处理 'database is locked' 错误的正确和最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23442847/

相关文章:

javascript - 从 JS 文件中读取 JSON 数据

python - 扩展 pandas 数据框中的行

c - 在 C 中使用 pthreads 时如何避免代码膨胀?

java - 具有 ListenableFuture 返回值的 bean 方法是否在单独的线程中执行?

python - 发送 HTML 电子邮件 Django 1.9

python - 导入pyplot时出现ImportError libqhull.so.5

ios - 异步加载uitableview中的照片

postgresql - sqlite在 "mode .insert"的输出是否正确?

java - 无法解析方法 "xxx"

mysql - 如何判断我的数据库是 SQLite 2 还是 3?