获取正在保存的 npy 文件的锁定状态

lea*_*ner 5 python multithreading numpy

我正在编写一个多线程程序来并行计算矩阵。换句话说,每个线程独立计算一个大矩阵,然后将其附加到从保存的文件加载的数组中。最后,附加的变量被保存回磁盘(使用np.save)。但是,当两个线程同时写入/访问文件时,就会出现问题。我的问题是,当一个线程写入文件时是否设置了一个锁,以便其他线程可以等待锁被释放来写入/访问文件?

MWE 如下所示

import os
import time
import numpy as np
from multiprocessing import Pool


def main():
    p = Pool(processes=8)
    files = os.listdir("matrices/dummy")
    for f in files:
        try:
            os.remove(f)
        except FileNotFoundError:
            print("File not found while deleting")
    a = np.random.randn(1, 10, 10)
    np.save("matrices/dummy/saved_mat.npy", a)
    p.starmap(save_mat, enumerate(np.random.rand(8)))


def save_mat(index, sleep_dur):
    # time.sleep(sleep_dur)
    np.random.seed(index)
    try:
        a = np.load("matrices/dummy/saved_mat.npy")
        new_val = np.random.randn(1, 10, 10)
        a = np.concatenate([a, new_val], axis=0)
    except FileNotFoundError:
        a = np.random.randn(1, 10, 10)
    np.save("matrices/dummy/saved_mat.npy", a)


if __name__ == "__main__":
    main()
    b = np.load("matrices/dummy/saved_mat.npy")
    c = 0
Run Code Online (Sandbox Code Playgroud)

大多数时候,程序运行没有问题。但在某些情况下会抛出错误,内容如下

ValueError:无法将大小为 0 的数组重塑为形状 (1,10,10)。

如有任何帮助,我们将不胜感激,谢谢。