基于sen2sor的并行批处理python代码,五倍速提高大气校正速率

博主进行了实验,发现在固态硬盘中该方法才会有效提速,在普通机械硬盘中速度和串行处理没有区别

只需修改代码中的sen2cor_path为你的sen2sor解压目录中的L2A_Process.bat所在位置
修改thread_count为同时处理的影像数(线程数),默认同时处理5幅影像
修改origin_dir为你需要处理的影像的目录(即下载后的压缩包解压后的文件夹所在地,结构如下)
在这里插入图片描述

# -*- encoding:utf-8 -*-
import subprocess
import os
import threading

sen2cor_path = r"D:\project\Sen2Cor-02.09.00-win64\L2A_Process.bat"
origin_dir = r"D:\temp"
thread_count = 5
pattern = ".SAFE"


# 数组分割
def arr_size(arr, size):
    # size为被分成的子数组的元素个数
    s = []
    for i in range(0, int(len(arr)) + 1, size):
        c = arr[i:i + size]
        s.append(c)
    newlist = [x for x in s if x]
    return newlist


class thread(threading.Thread):
    def __init__(self, in_file):
        threading.Thread.__init__(self, name='线程' + in_file)
        self.in_file = in_file

    def run(self):
        process(self.in_file)


def process(in_file):
    zip_file_path = os.path.join(origin_dir, in_file)
    # print(zip_file_path)
    xml_file_path = zip_file_path
    xml_file_path1 = os.path.basename(xml_file_path)
    xml_file_path2 = os.path.join(origin_dir, xml_file_path1)
    os.chdir(xml_file_path2)
    print(os.getcwd())
    # cmd_args = [sen2cor_path, xml_file_path, \
    #           '--output_dir', output_dir]
    cmd_args = [sen2cor_path, xml_file_path]

    print(cmd_args)

    subprocess.call(cmd_args)


def group_processd(in_file_list):
    threads = []
    for item in in_file_list:
        threads.append(thread(item))
    for t in threads:  # 开启线程
        t.start()
    for t in threads:  # 阻塞线程
        t.join()
    return 0


all_file = os.listdir(origin_dir)
group_all_file = arr_size(all_file, thread_count)
print("一共{}组数据".format(len(group_all_file)))
for i, in_file in enumerate(group_all_file):
    print("开始处理第{}组".format(i))
    print(in_file)
    print("==========================")
    group_processd(in_file)

    # _thread.start_new_thread(group_processd, ([]))

猜你喜欢

转载自blog.csdn.net/qq_29391809/article/details/127588092
今日推荐