多处理池在块上的性能更差

时间:2016-11-03 16:30:54

标签: python multithreading image-resizing pool chunks

我对Python多处理池性能有一些奇怪的行为。在以下代码中,data是数百万要调整大小的图像的数组,chunks_listdata的数据块。我使用pool = Pool(14)。函数resize_images一次调整一组图像的大小,而resize_image调整一个符号图像的大小。 以下代码:

res = [pool.apply_async(resize_image, args=[img]).get() for img in data]

比这段代码快:

chunks_list = [data[i:i + chunk_size] for i in range(0, len(data), chunk_size)]
res = [pool.apply_async(resize_images, args=[imgs]).get() for imgs in chunks_list]

为什么?我预计相反的情况是正确的,因为第一个代码将指定许多“微小的”。流程到CPU池。但是块会产生更少的任务。 有没有更有效的方法来实现我想要的? (GPU也许?)

1 个答案:

答案 0 :(得分:-1)

pool.map(preprocess_images, [imgs for imgs in chunks])

可以比两者更快地完成工作。