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)。
如有任何帮助,我们将不胜感激,谢谢。
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |