У меня более 100 спутниковых снимков с несколькими спектральными полосами. В прошлом я использовал свой сценарий анализа, чтобы go проходил через все пиксели и выполнял расчеты, которые мне нужно сделать, по одному изображению за раз. Мой сценарий не использовал 6-ядерный компьютер, и я столкнулся с реализацией concurrent.futures, которая звучала так, как мне нужно.
У меня есть функция, которая выполняет всю необходимую работу
def mesma(filename):
....
....
Это длинная функция, но я знаю, что она работает. Я использовал его в течение l oop для перебора всех имеющихся у меня файлов изображений. Для завершения sh одного файла требуется примерно 30 минут.
Я попробовал следующее:
with concurrent.futures.ProcessPoolExecutor(max_workers=6) as executor:
executor.map(mesma, filelist)
* Я выбрал max_workers = 6 в качестве примера, ранее я не делал t включает его, и он создал 12 процессов (я предполагаю, что каждое ядро выполняет гиперпоточность), и
pmset -g thermlog
показывает 12 процессоров.
При выполнении это создает 6 процессов с уникальными именами файлов, как и ожидалось , Однако даже через пару часов я не получаю никаких сообщений или сообщений об ошибках. Интересно, что (на Jupyterlab), когда я пытаюсь остановить скрипт, он автоматически перемещается на следующие 6 файлов и так далее, пока я не остановлю все ядра.
Я надеялся, что с ProcessPoolExecuter я смог получить некоторые значительное ускорение обработки изображений, так как мне не пришлось бы ждать, пока одно изображение заблокирует процессор.
concurrent.futures - для меня совершенно новая сфера, поэтому, возможно, я упускаю что-то очевидное здесь.
Обновление: Когда я указал max_workers для любого числа, оно действительно работает. Когда я не указываю max_workers, он никогда ничего не выводит. Сейчас я сохраню флаг max_workers.