我确定我错过了一些非常明显的东西,但我不能为我的生活停止我的pysqlite脚本崩溃与数据库锁定错误.我有两个脚本,一个用于将数据加载到数据库中,另一个用于读取数据,但两者都会频繁地立即崩溃,具体取决于另一个脚本在任何给定时间对数据库执行的操作.我将两个脚本的超时设置为30秒:
cx = sqlite.connect("database.sql", timeout=30.0)
并且我认为我可以看到一些超时的证据,我得到了一个似乎是时间戳(例如0.12343827e-06 0.1 - 以及如何停止打印?)偶尔在我的Curses格式化输出屏幕中间转储但是没有任何延迟在30秒超时附近远程,但仍然其中一个不断地从此反复崩溃.我在64位4 CPU HS21 IBM刀片上运行RHEL 5.4,并且听说过有关多线程问题的一些提及,我不确定这是否相关.在使用包的sqlite-3.3.6-5和python-sqlite的-1.1.7-1.2.1,并在升级到红帽的官方规定以外的新版本是不是对我来说是很好的选择.可能,但由于环境一般不可取.
我autocommit=1
以前在两个脚本中都有过,但之后都禁用了,我现在正在cx.commit()
使用插入脚本,而不是在select脚本上提交.最终,因为我只有一个脚本实际上做了任何修改,我真的不明白为什么这种锁定应该发生.我注意到随着时间的推移,当数据库变得更大时,情况会更糟.它最近是13 MB,有3个相同大小的表,这是大约1天的数据.创建一个新文件已经显着改善了这一点,这似乎是可以理解的,但最终似乎没有遵守超时.
任何指针非常赞赏.
编辑:因为要求我能够稍微重构我的代码并使用一个信号在一个事务中每5秒定期写0到150次更新.这显着地减少了锁定的发生,小于一小时而不是每分钟一次.我想我可以进一步确保写入数据的时间在我读取其他脚本中的数据时偏移了几秒钟,但从根本上我正在解决一个问题,因为我对它进行了调整,不需要超时,这不会看起来还不错.助教.