如何并行运行子流程,等待它们完成,然后运行子流程

时间:2019-05-10 09:17:25

标签: python parallel-processing subprocess gdal

我正在尝试并行运行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

0 个答案:

没有答案