SQLite 作为数据库支持不同程度的并发,具体取决于版本和设置,因此我预计数据库工具箱中 SQLite 的 MATLAB 接口将支持某种程度的并发。当数据库访问失败时,它至少应该显示错误。
但是,当我使用以下代码片段时,
conn=sqlite("sqlite_concurr_test.db","create");
conn.close();
ppool=parpool(4);
ff=parallel.Future.empty();
disp("Write 500 numbers")
for ii=1:500
ff(ii)=parfeval(ppool,@writeOne,0,ii);
end
for ii=1:500
ff(ii).wait()
end
delete(ppool);
conn=sqlite("sqlite_concurr_test.db");
readback=conn.sqlread("test");
disp("Readback "+num2str(size(readback,1))+" numbers");
function writeOne(ii)
conn=sqlite("sqlite_concurr_test.db");
conn.sqlwrite("test",array2table(ii));
conn.close();
end
我得到了意想不到的结果
使用“进程”配置文件启动并行池(parpool)...
连接到并行池(工作人员数量:4)。
写500个数字
使用“进程”配置文件的并行池正在关闭。
回读74个数字
这表明没有发生某些数据库写入,并且没有错误报告。 我可以做什么来改变这种行为?我应该做些什么来确保并行访问,或者至少在出现问题时收到通知?