#image #multiprocessing #pool
#изображение #многопроцессорная обработка #Бассейн
Вопрос:
Я использую многопроцессорную обработку.Объедините вместе с apply_async() для обработки большого количества изображений (около 1000).
Я настроил пул на использование 4 процессов.
Моя проблема заключается в том, как изменяется скорость обработки изображений в зависимости от количества обрабатываемых элементов.
Например, когда пул заполнен 10 элементами, эти элементы обрабатываются за 0,5 секунды.
Когда один и тот же код выполняется для 1000 элементов, первые 10 элементов обрабатываются за 10 секунд.
Почему это? Я бы ожидал увеличения длины выполнения всей работы, но не скорости обработки изображений.
Вот код:
imagelist = [...] # array of images(pixel data)
pool = Pool(processes=4)
for i, image in enumerate(imagelist):
a = pool.apply_async(process, args=(image), callback=postprocess)
Я бы ожидал, что скорость обработки изображений будет постоянной, независимо от количества обрабатываемых элементов. Почему это не так?
Комментарии:
1. Я не эксперт, но я бы сказал так: вы запускаете процесс для всех них, поэтому процессор намного больше переключается между каждым потоком, оставляя меньше времени для выполнения вашего фактического процесса. Я не знаю, из чего состоит ваш процесс, но будьте уверены, что он либо выполняет длительное вычисление, либо какой-то блокирующий процесс (например, загрузка или что-то в этом роде). В противном случае это не так полезно
2. @DimitriBosteels Процесс представляет собой функцию обработки изображений с использованием OpenCV. Обычно для завершения требуется около секунды или двух. Вы думаете, это слишком быстро?
3. нет, но тогда почему на 10 изображений уходит менее 1 секунды, если на каждый процесс уходит 1-2 секунды, но это нормально, если вы проверяете только время выполнения для первых элементов. Асинхронное программирование менее эффективно, когда коллекция невелика. Поэтому вместо этого сравните время выполнения для всей коллекции 🙂 Ну, простой способ проверить, быстрее ли это, — сделать это асинхронно и синхронно, с таймером и проверить прошедшее время для одного или другого.
4. Размер изображений одинаков для каждого изображения или он меняется от изображения к изображению?
5. @DimitriBosteels попытается рассчитать время