我试图在100,000张图片上进行迭代,捕捉一些图片特征,并将得到的dataFrame作为一个pickle文件存储在磁盘上。
不幸的是,由于内存的限制,我不得不将图像分成20,000块,并在将结果保存到磁盘之前对它们进行操作。
下面写的代码应该是在开始循环处理下一个20,000张图片之前保存20,000张图片的结果数据框。
然而,这似乎并没有解决我的问题,因为在第一个for循环结束时,内存并没有从RAM中释放。
因此,在处理第50000条记录的某个地方,程序因内存不足而崩溃。
我试着在将对象保存到磁盘并调用垃圾收集器后将其删除,然而RAM的使用似乎并没有减少。
我错过了什么?
#file_list_1 contains 100,000 images
file_list_chunks = list(divide_chunks(file_list_1,20000))
for count,f in enumerate(file_list_chunks):
# make the Pool of workers
pool = ThreadPool(64)
results = pool.map(get_image_features,f)
# close the pool and wait for the work to finish
list_a, list_b = zip(*results)
df = pd.DataFrame({'filename':list_a,'image_features':list_b})
df.to_pickle("PATH_TO_FILE"+str(count)+".pickle")
del list_a
del list_b
del df
gc.collect()
pool.close()
pool.join()
print("pool closed")