1 import os 2 import multiprocessing 3 import os 4 import time 5 6 def copy_file(old_file, new_file, q): 7 """拷贝数据""" 8 old_f = open(old_file, 'rb') 9 old_content = old_f.read() 10 old_f.close() 11 # 打开新文件开始拷贝 12 # print(os.listdir(new_file)) 13 new_filex = open(new_file, 'wb') 14 new_filex.write(old_content) 15 new_filex.close() 16 q.put(1) 17 time.sleep(1) 18 19 def main(): 20 # 1、获取文件夹内每个文件名 21 old_path = r'G: est' 22 old_filename = os.listdir(old_path) 23 # print(old_filename) 24 # 2、创建一个新的文件夹用于存储拷贝的文件 25 new_path = r'G:\' 26 new_filename = 'testcopy' 27 new_filename_path = os.path.join(new_path, new_filename) 28 os.mkdir(new_filename_path) 29 # 3、拷贝函数 30 # copy_file(old_filename, old_path, new_filename) 31 # 4、创建进程池 32 po = multiprocessing.Pool(3) 33 q = multiprocessing.Manager().Queue() 34 for x in old_filename: 35 old_file = os.path.join(old_path, x) 36 new_file = os.path.join(new_filename_path, x) 37 po.apply_async(copy_file, (old_file, new_file, q)) 38 po.close() 39 # po.join() 40 # 6、显示拷贝进度,取消po.join(),通过while循环来阻塞主进程结束 41 while True: 42 num = q.qsize() 43 num_all = len(old_filename) 44 print(' 拷贝进度为:%.02f %%' % (num*100/num_all)) 45 if num ==num_all: 46 break 47 48 if __name__ == '__main__': 49 main()