我正在开发一个应用程序来读取视频,将其转换为图像,然后成对处理它们。由于应用程序将在Raspberry Pi上运行,因此内存不足。
如果我在一个简单的for循环中运行任务而没有Executor内存表现得很好但是如果我使用Executor调度50个作业,例如,内存会被卡在800Mb左右,而且那个chunk永远不会被释放。有问题的代码如下:
executor = ThreadPoolExecutor(max workers = 1)
future_list = []
#Read converted images from directory(around 100 images in gray scale)
images = imread_collection(image_directory)
for i in range(0,len(images)-1,2):
img1 = images[i][:,:,0]
img2 = images[i+1][:,:,0]
future = executor.submit(process,xStart,yStart,xLen,yLen,img1,img2,i)
future_list.append(future)
#Wait or all tasks to finish
executor.shutdown(wait=True)
Memory consumption without Executor
Memory consumption using ThreadPool Executor
我在发送代码之前在Mac和Linux笔记本电脑上测试了这个 覆盆子。此问题出现在Linux中,但不存在于Mac中。