我想在Python中使用multiprocessing
库来并行读取文件并将加载的信息存储到列表中。我还希望这种并行加载文件的方法是一个实例方法,对于某些类,其他实例方法也可以调用该方法。
当我第一次调用并行化加载函数(即load_multiple_files
)时,数据将并行加载并按预期返回。但是,第二次调用该函数时,进程将死锁。
我尝试重新排序两个调用(即results_B
之前的results_A
),并且第二个调用的进程死锁。我也尝试删除pool.join(),但这没有成功。
这是当前的一些伪代码:
class Foo():
def __init__(self, filepaths_A: List[str], filepaths_B: List[str]):
results_A = load_multiple_files(filepaths_A) # works as expected, with files loaded in parallel
results_B = load_multiple_files(filepaths_B) # processes deadlock and program hangs
def load_file(self, filepath: str):
# load file and return a numpy array
with File(filepath, 'r') as f:
result = l['data'][:]
return result
def load_multiple_files(self, filepaths: List[str]):
""" Wrapper for loading multiple files in parallel
pool = mp.Pool()
results = pool.map(self.load_file, filepaths)
pool.close()
pool.join()
return results
我希望无论调用load_multiple_files
方法的次数如何,加载过程都会并行化并返回加载的数据。
使用multiprocessing.Pool
可以解决此问题吗?