博主进行了实验,发现在固态硬盘中该方法才会有效提速,在普通机械硬盘中速度和串行处理没有区别
只需修改代码中的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, ([]))