多任务文件夹复制并添加进度

import multiprocessing
import os


def copy_file(q,file_name, new_folder_name, old_folder_name):
    '''完成文件拷贝'''
    # print('拷贝的文件名称为:%s' % file_name)

    with open(old_folder_name + '/' + file_name, 'rb') as f:
        content = f.read()

    # old_file = open(old_folder_name + '/' + file_name,'rb')
    # content = old_file.read()
    # old_file.close()

    # 保存到新的文件夹中
    new_file = open(new_folder_name + '/' + file_name, 'wb')
    new_file.write(content)
    new_file.close()

    q.put(file_name)

def main():
    # 获取用户要复制的文件夹名字  test
    old_folder_name = input('请输入要复制的文件夹名字:')

    # 创建一个新的文件夹   test[复件]
    new_folder_name = old_folder_name + '复件'
    if not os.path.exists(new_folder_name):
        os.mkdir(new_folder_name)

    # 获取文件夹的所有待拷贝的文件名字
    file_names = os.listdir(old_folder_name)
    # print(file_names)

    # 创建进程池
    po = multiprocessing.Pool(3)

    # 创建队列
    q = multiprocessing.Manager().Queue()

    # 添加拷贝任务
    for file_name in file_names:
        po.apply_async(copy_file, args=(q,file_name, new_folder_name, old_folder_name))

    po.close()

    # 文件的总数
    file_count = len(file_names)

    copy_file_num = 0
    while True:
        file_name = q.get()
        copy_file_num += 1

        print('\r拷贝的进度%2.f%%' % (copy_file_num*100/file_count), end='')
        if copy_file_num >= file_count:
            break
        # 退出条件
        # if q.empty():
        #     break

    # po.join()


if __name__ == '__main__':
    main()

执行:
请输入要复制的文件夹名字:demo
拷贝的进度100%

你可能感兴趣的:(多任务文件夹复制并添加进度)