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:\test'
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('\r拷贝进度为:%.02f %%' % (num*100/num_all))
45 if num ==num_all:
46 break
47
48 if __name__ == '__main__':
49 main()