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')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值