python 多进程处理数据

在深度学习中,图片、文本等数据集非常大。对数据进行合并,复制,转移删除等操作如果使用 windows 鼠标操作是一个非常慢的过程。 小白自己编写了一个相关代码,多进程速度还行,如果有更好的解决办法或者中间会出现一些进程安全,数据错误请留言。

from multiprocessing import Process
import glob
import os 

#多进程函数处理模块
def multi_processing_task(task_name,data_list,*args,data_per_part=4000):
    data_len = len(data_list)
    part_num = int(data_len / data_per_part) if data_len % data_per_part == 0 else data_len // data_per_part + 1
    print(part_num)
    multi_processes = []
    for idx in range(part_num):
        if idx == (part_num-1):
            seg_data = data_list[idx*data_per_part:]
        else:
            seg_data = data_list[idx*data_per_part:(idx+1)* data_per_part]
        multi_processes.append(Process(target=task_name,args=(seg_data,*args)))
        # print("Process_{} created!".format(idx))
    for sp in multi_processes: sp.start()
    for sp in multi_processes: sp.join()

#文件移动方法
def move_files(file_list,tar_path):
    for item in file_list:
        file_name = os.path.basename(item)
        new_full_path = os.path.join(tar_path,file_name)
        shutil.move(item,new_full_path)

#删除文件方法
def delete_files(file_list):
    for item in file_list:
        if os.path.isfile(item):
            os.remove(item)

if __name__ == '__main__':
    tar_path = r"E:\henryTrainDir\new_car_detect_part"
    # tar_path2 = r"E:\tar_path2"
    file_list = []
    #使用glob pattern查找速度很快
    file_lists = glob.glob(tar_path+r"\**\*.*",recursive=True)
    print(len(file_lists))
    multi_processing_task(delete_files,file_lists,data_per_part=3000)

 

你可能感兴趣的:(python)