在Python

时间:2016-09-22 15:40:09

标签: python linux multithreading

我有一个文件列表,需要在拼凑在一起之前只使用一个命令进行预处理。此预处理命令通过系统调用使用第三方软件写入geoTIFF。我想使用多线程,以便可以同时预处理各个文件,然后,一旦处理完所有单个文件,就可以将结果镶嵌在一起。

我以前从未使用多线程/并行处理,在网上搜索数小时后,我仍然不知道最好,最简单的方法是什么。

基本上是这样的:

files_list = # list of .tif files that need to be mosaicked together but first, need to be individually pre-processed

for tif_file in files_list:
    # kick the pre-processing step out to the system, but don't wait for it to finish before moving to preprocess the next tif_file

# wait for all tiffs in files_list to finish pre-processing
# then mosaick together

我怎么能实现这个目标?

2 个答案:

答案 0 :(得分:0)

请参阅multiprocessing文档。

from multiprocessing import Pool

def main():
    pool = Pool(processes=8)
    pool.map(pre_processing_command, files_list)

    mosaic()

if __name__ == '__main__':
    main()

答案 1 :(得分:0)

如果您需要使用多个处理器核心,则应使用multiprocess,在最简单的情况下,您可以使用以下内容:

def process_function(tif_file):
    ... your processing code here ...

for tif_file in files_list:
    p = Process(target=process_function, args=(tif_file))
    p.start()
    p.join()

您需要注意,因为同时运行的许多进程可能会超越PC资源,您可以查看herehere来解决问题。

您也可以使用threading.thread,但它只使用一个处理器核心,并受Global Interpreter Lock

的限制