Как обрабатывать несколько файлов внутри пула при многопроцессорной обработке

Я пытаюсь обработать несколько изображений из отдельных файлов, например, я пытаюсь обработать 3 папки, каждая из которых содержит 8 спутниковых изображений, и для каждого изображения я делаю 4 отдельных поправки атмосферы (математические уравнения), а затем сохраняю их с разными именами,

Ранее я был в состоянии подать заявку Pool инструмент из Multiprocessing за 1 папку.

из основного скрипта я использую эту функцию для вызова функции обработки для каждой папки

def proceso_lotes(self, path):
    #Flags to choose which atmospheric correction use
    rad  = self.v12.get()
    ref  = self.v22.get()
    dos1 = self.v32.get()
    dos2 = self.v42.get()
    ndvi = self.v52.get()

    start_time = time.time()

    for num_file in range(len(self.new_files)):  #self.new_files is the list that contains the folder name
        print()
        print("Archivo #: ", num_file)
        print("Ruta: ", path)
        print("Nombre de archivo: ", self.new_files[num_file])
        path_mtdt=os.path.join(path, self.new_files[num_file],self.new_files[num_file]+"_MTL.txt" )
        print("Ruta de mtdt: ", path_mtdt)

        #This are the functions that uses the multiprocessing option,
        if rad:
            radiancia_lote(path_mtdt)
        if ref:
            reflectancia_lote(path_mtdt)
        if dos1:
            toados1_lote(path_mtdt)
        if dos2:
            toados2_lote(path_mtdt)


print('TIEMPO TOTAL DE CALCULOS::')
print((time.time() - start_time))

И в примере давайте назовем radiancia_lote это функция в другом скрипте

def radiancia_lote(archivo):

    start_time = time.time()
    print("Archivo: ")
    print(archivo)

    p = Pool(processes=cpu_count())
    p.map(partial(procesar_bandas, archivos=archivo), range(1, 8))
    p.close()
    p.join()
    print('TOTAL TIME TO RAD:')
    print((time.time() - start_time))

Вот где я использую Pool функционирует и отлично работает для 1 файла (примерно 4 секунды), после этого я проверяю диспетчер задач Windows и не вижу работающих ядер, а следующий файл занимает до 70 секунд или более, например, если Pool не начинается снова.

Могу ли я сделать Pool функция, которая открывает 3 папки одновременно, затем вызывает другую Pool обработать как можно больше изображений до того, как все ядра заполнятся? Я надеюсь, что я ясно изложил свою идею. Или мне нужно использовать Pool а также Threads достичь этой задачи? Я немного новичок в Multiprocessing на питоне

Я использую Python 3.5

0 ответов

Другие вопросы по тегам