import multiprocessing
import os
import shutil
import time
import numpy as np
# 创建文件夹
def create_dir(dir_name):
if not os.path.exists(dir_name):
os.makedirs(dir_name)
return None
# 递归获取文件夹 targetDir 下所有的图片,保存到 files 列表中
def getAllImages(targetDir):
files = []
listFiles = os.listdir(targetDir)
for i in range(0, len(listFiles)):
path = os.path.join(targetDir, listFiles[i])
if os.path.isdir(path):
files.extend(getAllImages(path))
elif path.endswith(('jpg', 'JPG', 'jpeg', 'png', 'PNG')):
files.append(path)
return files
def det_allimgs_p(idx, splitimgs, save_dir):
print('start process', i)
time.sleep(1)
al = len(splitimgs)
for i, img_path in enumerate(splitimgs):
# do something, 例如对图片进行标签生成。 这里只进行简单的图片文件复制
img_name = os.path.basename(img_path)
dest_path = os.path.join(save_dir, img_name)
shutil.copy(img_path, dest_path)
print('\r', str(i) + '/' + str(al), 'proc:', idx, end=' ')
print(idx, 'finish')
if __name__ == "__main__":
start_time = time.time()
src_dir = r'E:\data\JPEGImages'
res_dir = src_dir + '-res'
create_dir(res_dir)
allimgs = getAllImages(src_dir)
print("len(allimgs): ", len(allimgs)) # src_dir 文件夹下图片总数量
groups = 3 # 进程数
img_groups = np.array_split(allimgs, groups) # 将总图片列表allimgs 分为 groups 组
# for i, igs in enumerate(img_groups):
# p = multiprocessing.Process(target=det_allimgs_p, args=(i, igs, res_dir))
# p.start()
# print('start process', i)
# time.sleep(1)
mps = [multiprocessing.Process(target=det_allimgs_p, args=(i, igs, res_dir)) for i, igs in enumerate(img_groups)]
[p.start() for p in mps]
[p.join() for p in mps] # 执行完 子进程 再执行 主进程, 这样可以统计 整个程序运行的时间
end_time = time.time()
print("Total time spent:", end_time - start_time)
python 多进程 处理图片数据
于 2023-01-10 18:19:07 首次发布