您的问题是,您正在使用应该使用多处理的线程(CPU绑定与IO绑定)。
我会像这样重构你的代码:
from multiprocessing import Pool
if __name__ == '__main__':
cpus = multiprocessing.cpu_count()
with Pool(cpus-1) as p:
p.map(get_image_features, file_list_1)
get_image_features
把这两行加在它的末尾。我不知道你到底是如何处理这些图像的,但我的想法是在每个进程中处理每个图像,然后立即将其保存到磁盘:
df = pd.DataFrame({'filename':list_a,'image_features':list_b})
df.to_pickle("PATH_TO_FILE"+str(count)+".pickle")
因此,数据帧将被pickle并保存在每个进程中,而不是在它退出之后。进程一旦退出就会从内存中清除,因此这应该可以保持低内存占用率。