我的perl脚本是多线程的,在每个线程中我都要写一些东西到sqlite3数据库.但正如你可能猜到的那样,我得到了很多
DBD :: SQLite :: db失败:数据库在script.pl第264行被锁定.
消息.我读到sqlite3能够处理多线程情况,甚至是INSERT语句,但我认为在同时插入8个线程时我会期待很多.
好了,所以它不可能通过这种方式,但不存在将要看到,如果数据库被锁定(或忙),然后等到再次自由之前进行检查的可能性?
我真的不想改为"真正的"DBMS,因为它只是一个简单的脚本.
谢谢
如果您需要阻止,直到您可以访问数据库,请尝试独占事务,即,
$dbh->do("begin exclusive transaction") or die $dbh->errstr;
#inserts here
$dbh->do("commit transaction") or die $dbh->errstr;
Run Code Online (Sandbox Code Playgroud)
这样,您将锁定委托给SQLite,而不是在Perl中进行.由于各种原因,这样更安全,尤其是您可能在Perl以外的其他内容中打开数据库,或者在另一个Perl进程而不是线程中打开数据库.
并且,正如@mob评论的那样,Perl线程是一个有点可笑的野兽.我只是在数据库中完成锁定,它属于它.