我对Python多处理池性能有一些奇怪的行为。在以下代码中,data
是数百万要调整大小的图像的数组,chunks_list
是data
的数据块。我使用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也许?)
答案 0 :(得分:-1)
pool.map(preprocess_images, [imgs for imgs in chunks])
可以比两者更快地完成工作。