- 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kun1280437633/article/details/80322984
import multiprocessing
import os
def copy_one_file(src_dir, new_dir, file_name):
# 打开遍历到的原文件,复制内容到新文件
with open(src_dir + '/'+file_name, 'rb') as src_file:
content = src_file.read()
with open(new_dir + '/' + file_name, 'wb') as new_file:
new_file.write(content)
def main():
"""获取要备份的文件夹名称,使用进程池处理文件的复制,每一个进程处理一个文件"""
# 1. 获取要备份的文件夹名
src_dir = input('请输入要备份的文件夹名称:')
# 2. 创建新文件夹 [新]文件夹名称
new_dir = '[新]' + src_dir
os.mkdir(new_dir) # 新建文件夹
# 3. 获取原文件夹下所有的文件名
file_list = os.listdir(src_dir)
# 4. 遍历原文件夹里的每一个文件,复制到新文件夹
for file_name in file_list:
copy_one_file(src_dir, new_dir, file_name)
if __name__ == '__main__':
main()
进程版文件复制器代码:
import multiprocessing
import os
def copy_one_file(src_dir, new_dir, file_name):
print('pid=', os.getpid())
# 打开遍历到的原文件,复制内容到新文件
with open(src_dir + '/'+file_name, 'rb') as src_file:
content = src_file.read()
with open(new_dir + '/' + file_name, 'wb') as new_file:
new_file.write(content)
def main():
"""获取要备份的文件夹名称,使用进程池处理文件的复制,每一个进程处理一个文件"""
pool = multiprocessing.Pool(10) # 创建容量为 10 的进程池
# 1. 获取要备份的文件夹名
src_dir = input('请输入要备份的文件夹名称:')
# 2. 创建新文件夹 [新]文件夹名称
new_dir = '[新]' + src_dir
os.mkdir(new_dir) # 新建文件夹
# 3. 获取原文件夹下所有的文件名
file_list = os.listdir(src_dir)
# 4. 遍历原文件夹里的每一个文件,复制到新文件夹
for file_name in file_list:
# copy_one_file(src_dir, new_dir, file_name)
pool.apply_async(copy_one_file, (src_dir, new_dir, file_name))
pool.close()
pool.join()
if __name__ == '__main__':
main()
打印进度文件复制器代码:
import multiprocessing
import os
def copy_one_file(src_dir, new_dir, file_name, q):
# 打开遍历到的原文件,复制内容到新文件
with open(src_dir + '/'+file_name, 'rb') as src_file:
content = src_file.read()
with open(new_dir + '/' + file_name, 'wb') as new_file:
new_file.write(content)
# 发送消息到主进程,通知打印复制进度
q.put(file_name)
def main():
"""获取要备份的文件夹名称,使用进程池处理文件的复制,每一个进程处理一个文件"""
q = multiprocessing.Manager().Queue()
pool = multiprocessing.Pool(10) # 创建容量为 10 的进程池
# 1. 获取要备份的文件夹名
src_dir = input('请输入要备份的文件夹名称:')
# 2. 创建新文件夹 [新]文件夹名称
new_dir = '[新]' + src_dir
os.mkdir(new_dir) # 新建文件夹
# 3. 获取原文件夹下所有的文件名
file_list = os.listdir(src_dir)
# 4. 遍历原文件夹里的每一个文件,复制到新文件夹
for file_name in file_list:
# copy_one_file(src_dir, new_dir, file_name)
pool.apply_async(copy_one_file, (src_dir, new_dir, file_name, q))
# pool.close()
# pool.join()
count = 0
while True:
file_name = q.get() # 从子进程获取已复制好的文件
count += 1
percent = count*100 / len(file_list)
print('\r复制进度为 %.2f%%' % (percent), end='')
import time
time.sleep(0.01)
if percent == 100:
break
if __name__ == '__main__':
main()