perl – sqlite中多线程INSERTS的限制
发布时间:2020-12-15 23:21:57 所属栏目:大数据 来源:网络整理
导读:我的perl脚本是多线程的,在每个线程中我都要写一些东西到sqlite3数据库.但正如你可能猜到的那样,我得到了很多 DBD::SQLite::db do failed: database is locked at script.pl line 264. 消息.我读到sqlite3能够处理多线程情况,甚至是INSERT语句,但我认为在同
我的perl脚本是多线程的,在每个线程中我都要写一些东西到sqlite3数据库.但正如你可能猜到的那样,我得到了很多
消息.我读到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线程是一个有点可笑的野兽.我只是得到数据库所做的锁定. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |