应用背景
在对对个文件夹进行里的数据进行处理时,正常py脚本是串行的,走完一个继续走下一个进行循环。当文件数据过多时就会耗费很多时间。
解决方案
想着使用多进程去做处理,对每一个文件夹分别去做处理,走并行操作。一下代码就是对train下面的文件夹进行处理,有多少个文件夹就会开启多少个进程,分别对文件夹去做处理。这个是比较简单的多进程,并没有对所有数据进行均分,只是对当前的文件夹进行多进程操作。(ps:比如有三个文件夹,会三个同时运行,会等全部结束一起退出,最终时长是最后完成的进程为主);
import multiprocessing,time,os
import os.path as osp
def main1(input, output, video_name):
pass
if __name__ == '__main__':
input = 'xxx'
output = 'xxx'
start = time.perf_counter() #开始时间
in_folder = osp.join(input, 'train')
video_names = os.listdir(in_folder)
cpu_num = multiprocessing.cpu_count() # 获取机器cpu核数,根据cpu核数计算任务所需进程
if cpu_num == 0:
print("没有cpu资源!!!")
raise RuntimeError
elif cpu_num == 1:
m = 1
else:
m = len(video_names) #让进程等于任务数
print(m)
pool = multiprocessing.Pool(processes=m) #开启线程池
# 运行时间为 201 seconds
for video_name in video_names:
train_res = pool.apply_async(main1, args=(input, output, video_name))
pool.close()
pool.join()
end = time.perf_counter()
print("运行时间为", round(end - start), 'seconds')