我正在将 mpi4py 用于我想要并行化的项目。下面是我的程序的非常基本的伪代码:
Load list of data from sqlite database
Based on COMM.Rank and Comm.Size, select chunk of data to process
Process data...
use MPI.Gather to pass all of the results back to root
if root:
iterate through results and save to sqlite database
我想通过简单地让每个进程将自己的结果写入数据库来消除对 MPI.Gather 的调用。所以我希望我的伪代码看起来像这样:
Load list of data
Select chunk of data
Process data
Save results
这将大大提高我的程序的性能。但是,我不完全确定如何做到这一点。我试图通过谷歌找到方法,但我唯一能找到的就是 MPI-IO。是否可以使用 MPI-IO 写入数据库?具体使用 python、sqlite 和 mpi4py。如果没有,是否有任何替代方法可以同时写入 sqlite 数据库?
编辑:
正如@CL 在评论中指出的那样,sqlite3 不支持并发写入数据库。所以让我换个方式问我的问题:有没有办法锁定对数据库的写入,以便其他进程等到锁定被删除后再写入?我知道 sqlite3 有自己的锁定模式,但这些模式似乎会导致插入失败而不是阻塞。我知道我在 Python 线程中看到过类似的东西,但我无法在网上找到任何关于使用 MPI 执行此操作的信息。