2015-04-09 5 views
1

Я ищу для разбивки 10 изображений на 2 части каждый (20 результирующих изображений). Изображения представляют собой 4-полосные (R, G, B, nIR) изображения NAIP, доступные от this website. Я использую arcpy пакет из ArcGIS, чтобы разделить одно изображение одновременно:Раскройте много растровых изображений ArcGIS параллельно с использованием многопроцессорной обработки Python

import arcpy, os 

inws = r'D:\temp\temp_NAIP' #Contains ~10 .tif images 
outws = r'D:\temp\temp_NAIP_tiles' 

arcpy.env.workspace = inws 
rasters = arcpy.ListRasters() 

for ras in rasters: 
    arcpy.SplitRaster_management(
     ras, outws, 
     os.path.basename(ras).split('.')[0], 
     split_method='NUMBER_OF_TILES', 
     format='TIFF', 
     num_rasters='1 2', 
     overlap=50, units='PIXELS) 

Как я могу интегрировать multiprocessing модуль в вышеприведенном сценарии для обработки, скажем, 4 изображения, в то время?

Btw, я отдаю себе отчет в blog post, который сочетает в себе multiprocessing и arcpy, хотя примеры являются специфическими для векторных данных, и я не могу понять, как использовать инструменты для обработки изображений.

ответ

1

Запрет на любые проблемы с совместным использованием ресурсов, преобразование простого цикла для многопроцессорности легко связано с multiprocessing.Pool. Попробуйте что-то вроде этого:

from multiprocessing import Pool 
import arcpy, os 

inws = r'D:\temp\temp_NAIP' #Contains ~10 .tif images 
outws = r'D:\temp\temp_NAIP_tiles' 

arcpy.env.workspace = inws  
rasters = arcpy.ListRasters() 

def process_img(ras): 
    arcpy.SplitRaster_management(
     ras, outws, 
     os.path.basename(ras).split('.')[0], 
     split_method='NUMBER_OF_TILES', 
     format='TIFF', 
     num_rasters='1 2', 
     overlap=50, units='PIXELS') 

pool = Pool(processes=4) 
pool.map(process_img, rasters) 

Пока rasters является итератором, он должен быть отображаемым в пул процесса. Имейте в виду, что каждый процесс будет «наследовать» стек родительского процесса, так что каждый процесс будет использовать свою собственную копию arcpy.env.workspace.

+0

это работало для вас? –

 Смежные вопросы

  • Нет связанных вопросов^_^