python多任务之进程池copy文件夹中所有文件

import multiprocessing
import os


# copy文件函数
def copy_file(old_folder_name, new_folder_name, file_name):
    print('copy文件夹{}====》到{},文件名称为:{}'.format(old_folder_name, new_folder_name, file_name))
    # 读取文件

    with open(old_folder_name + '/' + file_name, 'rb') as fw:
        file_content = fw.read()
    # 写入文件
    with open(new_folder_name + '/' + file_name, 'wb') as fr:
        fr.write(file_content)


def main():
    # 1. 获取用户要copy的文件夹名称

    # global new_folder_name
    old_folder_name = input('请输入要copy的文件夹名称: ')
    if not os.path.exists(old_folder_name):
        old_folder_name = input('文件夹不存在,请重新输入: ')

    # 2. 创建一个新的文件夹
    # if not os.path.exists(old_folder_name + '[复制]'):
    # 如果文件夹存在,则抛出异常
    try:
        new_folder_name = old_folder_name + '[复制]'
        os.mkdir(new_folder_name)
    except:
        pass

    # 3. 获取文件夹所有的待copy的文件名称 listdir()
    file_names = os.listdir(old_folder_name)
    print(file_names)

    # 4. 赋值文件夹中的文件,到新的文件夹中
    pool = multiprocessing.Pool(5)

    for file_name in file_names:
        # 取出进程池中一个进程执行copy文件操作,当空闲进程使用光后,从使用过的进程(alive活跃的)中取一个年龄做大(且进程执行完毕)的进程,重复使用。
        pool.apply_async(copy_file, args=(old_folder_name, new_folder_name, file_name))

    # 这两个必须写否则进程池里的进程不会运行
    pool.close()
    pool.join()


if __name__ == "__main__":
    main()

需要注意的是主进程不会等待进程池中程序运行完毕,它会直接运行完主进程程序,主进程程序运行完毕,那么程序就结束了,所以要加入pool.close()结束进程池,让进程池中进程开始运行,pool.join()使主进程等待pool中所有子进程执行完成,必须放在close语句之后

上一篇:java – 跨平台方式来探索文件的包含文件夹


下一篇:最简单的window下使用Jenkins来做自动化部署的教程