perl – sqlite中多线程INSERTS的限制

前端之家收集整理的这篇文章主要介绍了perl – sqlite中多线程INSERTS的限制前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的perl脚本是多线程的,在每个线程中我都要写一些东西到sqlite3数据库.但正如你可能猜到的那样,我得到了很多

DBD::sqlite::db do Failed: database is locked at script.pl line 264.

消息.我读到sqlite3能够处理多线程情况,甚至是INSERT语句,但我认为在同时插入8个线程时我会期待很多.

好的,所以它不可能这样,但是在插入之前是否有可能执行检查以查看数据库是否被锁定(或忙碌)然后等待再次免费?

我真的不想改为“真正的”DBMS,因为它只是一个简单的脚本.

谢谢

解决方法

如果您需要阻止,直到您可以访问数据库,请尝试独占事务,即,

$dbh->do("begin exclusive transaction") or die $dbh->errstr;
#inserts here
$dbh->do("commit transaction") or die $dbh->errstr;

这样,您将锁定委托给sqlite,而不是在Perl中进行.由于各种原因,这样更安全,尤其是您可能在Perl之外的其他内容中打开数据库,或者在另一个Perl进程而不是线程中打开数据库.

并且,正如@mob评论的那样,Perl线程是一个有点可笑的野兽.我只是得到数据库所做的锁定.

猜你在找的Perl相关文章