我正在尝试处理来自不同文件的多个图像,例如,我正在尝试处理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
没有重新开始。
我可以创建一个同时打开3个文件夹的Pool
函数,然后调用另一个Pool
来处理所有核心已满之前的图像吗?我希望我明白我的想法。
或者我需要使用Pool
和Threads
来完成该任务?
我在python <{1}}上有点新的
我正在使用Python 3.5