Как обрабатывать несколько файлов внутри пула при многопроцессорной обработке
Я пытаюсь обработать несколько изображений из отдельных файлов, например, я пытаюсь обработать 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