Я пытаюсь ускорить раздел моего кода, используя параллельную обработку в python, но у меня возникают проблемы с его работой, или даже найти примеры, которые имеют отношение ко мне.Параллелизировать обработку изображений с помощью Numpy
Код создает низкополигональную версию изображения с использованием триангуляции Делоне, а часть, которая меня замедляет, находит средние значения каждого треугольника.
Я был в состоянии получить хорошее увеличение скорости на векторизации мой код, но надеюсь получить больше, используя распараллеливание:
код У меня возникли проблемы с чрезвычайно простой цикл:
for tri in tris:
lopo[tridex==tri,:] = np.mean(hipo[tridex==tri,:],axis=0)
Перечисленные переменные следующие.
tris
- уникальный список питон всех индексов треугольников
lopo
- массив Numpy окончательной версии с низким многоугольник изображения
hipo
- массив Numpy исходного изображения
tridex
- массив Numpy того же размера, что и изображение. Каждый элемент представляет собой пиксель и сохраняет треугольник, в котором находится пиксель.
Я не могу найти хороший пример, который использует несколько массивов numpy в качестве входных данных, причем один из них является общим.
Я попытался мультипроцессирование (с выше фрагментом кода, завернутым в функции под названием colorImage):
p = Process(target=colorImage, args=(hipo,lopo,tridex,ppTris))
p.start()
p.join()
Но я получаю сломанную ошибку трубы сразу.
ли нарезания резьбы не позволяют для установки новых значений? Я не полностью проверил, но я уверен, что потоки не будут пытаться писать в одни и те же пиксели.Выполнение средних вычислений и написания в то же время должно дать мне большое ускорение, которое я надеюсь увидеть. – Bill
Это тоже будет работать, но я никогда не работал с общей переменной по потокам. Пока вы просто устанавливаете пиксели, вы должны быть в порядке. И да, это также даст вам большее ускорение. См. Ссылку SO, представленную мной для примера. – Will
Кажется, у меня проблемы с запуском даже простых функций параллельно. Знаете ли вы, почему сценарий (запускается в IDLE) будет запускаться последовательно даже при использовании модулей параллелизации? Может ли быть какая-то настройка на моем компьютере, которая ограничивает количество потоков IDLE? – Bill