我有一个循环,每次都会使我的RAM崩溃,我想进行并行化。
我尝试了此代码,但没有成功:
from joblib import Parallel, delayed
from Bio.Align.Applications import ClustalOmegaCommandline
def run(test):
im = process_image(Image.open(test['Path'][i]))
test_images.append(im)
if __name__ == "__main__":
test_images = []
test = range(len(test))
Parallel(n_jobs=len(test)(
delayed(run)(i) for i in len(test))
我收到此错误:
文件“”,第16行 len(test)中的i的延迟(运行)(i)) ^ SyntaxError:解析时出现意外的EOF
我的循环:
test_images = []
for i in range(len(test)):
im = process_image(Image.open(test['Path'][i]))
test_images.append(im)
test_images = np.asarray(test_images)
我尝试了几种解决方案,但是我需要一个数据库输出。
答案 0 :(得分:0)
您可以尝试以下方法吗?
def process_image(img_path):
img_obj = Image.open(img_path)
# your logic here
return im
def main():
image_dict = {}
with concurrent.futures.ProcessPoolExecutor() as executor:
for img_path, im in zip(test['Path'], executor.map(process_image, test['Path'])):
image_dict[img_path] = im
return image_dict
if __name__ == '__main__':
image_dict = main()
test_images = np.asarray(image_dict.values())
答案 1 :(得分:0)
我不确定,并行化是否可以解决内存问题。
您是否需要将每个图像存储在一个列表中,该列表存储在内存中?也许只是保存路径并在需要时加载它?
或尝试generators。在那里,这些值是延迟生成的(仅在需要时才生成),从而减少了内存消耗。