Я пытаюсь запустить GDAL (обработку изображений) параллельно, а затем сохранить путь к выходным файлам в списке, который должен быть записан в файл. этот файл необходимо использовать в единственной команде подпроцесса.
У меня нет большого опыта работы с мультипроцессорами / подпроцессами, но я прочитал
Параллельный запуск нескольких подпроцессов - python 2.7
Как запустить несколько подпроцессов параллельно и дождаться их завершения в Python
Второй вопрос - на чем я основывал большую часть моего текущего кода. Тем не менее, он возвращает некоторые ошибки:
этот фрагмент работает параллельно:
childprocesses = []
for fil in files: #files is list of input .tif files
p = Popen(['gdal_translate', 'cmd2', 'cmd3' #different settings for gdal
, fil
, os.path.join(cfolder,os.path.basename(fil))] #output
, stdout=PIPE
, stderr=PIPE)
childprocesses.append(p)
for cp in childprocesses:
cp.wait
print ('translate complete')
После этого я пытаюсь сохранить пути вывода в списке (cfiles
) и записать его в файл (temp_file
). этот файл со списком файлов затем используется в другой команде gdal:
cfiles = glob.glob('{cfol}{sep}*.tif'.format(cfol=cfolder, sep=os.sep))
print (cfiles)
with open(temp_file, 'w') as f:
for line in cfiles:
f.write(line+'\n')
subprocess.check_output(['gdalbuildvrt',
'-hidenodata', '-input_file_list', tempfile, outputdir])
однако, когда я запускаю весь код, он печатает строку 'translate complete' 9 раз (в моем testinput есть 9 файлов tif) и список с наборами данных. однако подпроцесс не может найти файлы:
translate complete
translate complete
translate complete
translate complete
translate complete
translate complete
translate complete
translate complete
translate complete
[]
FAILURE: No input filenames specified.
ошибка возвращается подпроцессом gdalbuildvrt
, потому что текстовый файл пуст. Я не уверен, почему это произошло. я предполагаю, что это потому, что gdal_translate
не завершил создание файлов при запуске списка файлов glob.glob.
То, на что я надеялся, это дождаться завершения всех подпроцессов gdal_translate
, прежде чем перечислять файлы и запустить gdalbuildvrt
.