python 使用multiprocessing进行多进程处理数据

应用背景

在对对个文件夹进行里的数据进行处理时,正常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')

你可能感兴趣的:(python,multiprocessing,python,开发语言)