我正在尝试并行运行GDAL(图像处理),然后将输出文件的路径存储在应写入文件的列表中。该文件需要在单个子过程命令中使用。
我在多处理/子过程上没有很多经验,但是我已经读过 Run multiple subprocesses in parallel - python 2.7
How do I run multiple subprocesses in parallel and wait for them to finish in 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])
但是,当我运行整个代码时,它将打印“翻译完成”行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
返回,因为文本文件为空。我不确定为什么会这样。我想是因为运行glob.glob文件列表时gdal_translate
尚未完成创建文件。
我希望的是,它会等待所有gdal_translate
子进程完成之后才列出文件并运行gdalbuildvrt
。