1、准备
本地创建一个测试文件夹
mkdir test
将大量文件复制进入测试文件夹,作测试用
cp /usr/bin/python3.6/* ./test/
2、写入代码
import os import multiprocessing def copy_file(que,file_name,old_folder_name,new_folder_name): """完成文件的复制""" # print("->>>>>模拟复制文件:从{}拷贝到{},文件名是{}".format(old_folder_name,new_folder_name,file_name)) # 读取文件 old_f = open(old_folder_name+'/'+file_name,'rb') content = old_f.read() old_f.close() # 写入文件 new_f = open(new_folder_name+'/'+file_name,'wb') new_f.write(content) new_f.close() # 如果拷贝完成了文件,那么就向队列中写入一个消息,表示已经完成 que.put(file_name) def main(): # 获取用户要copy的文件夹的名字 old_folder_name = input('请输入要copy的文件夹的名字:') # 创建一个新的文件夹 try: new_folder_name = old_folder_name+"(1)" os.mkdir(new_folder_name) except: pass # 获取文件夹的所有的待copy的文件名字 listdir() filename_waitting_by_copy = os.listdir(old_folder_name) # 创建进程池 po = multiprocessing.Pool(10) # 创建一个队列 que = multiprocessing.Manager().Queue() # 想进程池中添加copy文件的任务 for file_name in filename_waitting_by_copy: po.apply_async(copy_file,args=(que,file_name,old_folder_name,new_folder_name)) po.close() # po.join() all_file_num = len(filename_waitting_by_copy) copy_completed_num = 0 while True: file_name =que.get() copy_completed_num+=1 progress_bar = (copy_completed_num*100/all_file_num) # print('已经完成{}的复制===>>>>>>进度为{:.2f}%%'.format(file_name,progress_bar)) print(' 进度为{:.2f}%%'.format(progress_bar),end='') if copy_completed_num>=all_file_num: break print() if __name__=='__main__': main()
3、模拟运行
完成