我有一个程序,运行多台计算机,所有计算机都需要从同一个sqlite数据库读取/写入。每个程序都对文件执行操作,并从存储在sqlite表中的列表中请求“可用”文件名。最多将有6-10个用户运行它。伪代码将是......
con = sqlite.connection(db,timeout=60)
filename = select file from tablename limit 1;
update tablename set status ="busy" where file = filename;
<..perform action. takes 2-5 minutes..>
update tablename set status ="Finished" where file = filename;
repeat
因此每个事务都非常快,但不幸的是,即使我将连接超时设置得很高,我仍然遇到“数据库被锁定”的问题。我已经阅读了apsw中的异步vfs,但听起来这个队列管理器只对一台机器来说是本地的。关于如何进行的任何建议?
编辑:我应该添加我受到IT限制,无法在我的桌面上设置正确的SQL服务器。
答案 0 :(得分:0)
(披露:我是APSW作者)异步VFS很久以前就被SQLite团队弃用了,并且多年来一直没有被APSW收录。使用write ahead logging在SQLite核心中提供了更好的集成等效功能。
......一台机器本地......
这意味着您正在尝试通过网络使用SQLite。不要那样做。不起作用。它最初似乎有效,但最终你会腐败。您无法提前测试以证明腐败不会发生。 More details here