我有一个文件列表,需要在拼凑在一起之前只使用一个命令进行预处理。此预处理命令通过系统调用使用第三方软件写入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
我怎么能实现这个目标?
答案 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资源,您可以查看here和here来解决问题。
您也可以使用threading.thread,但它只使用一个处理器核心,并受Global Interpreter Lock
的限制