У меня есть странное поведение с Python Multiprocessing Pool performance. В следующем коде 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)
Если изображения большие, вы будете тратить много времени, просто перемещая их между процессами. – BlackBear
@BlackBear Вот почему я сделал это в кусках, но был удивлен, что он медленнее. –
@BlackBear Обратите внимание, что функция resize_images изменяет размер группы изображений одновременно, в отличие от resize_image, которые изменяют размер одного изображения. –