Python多进程文件夹复制器完整实现
本文提供基于Python multiprocessing模块的多进程文件夹复制完整代码。通过进程池并发执行文件读写,利用Manager().Queue()实现子进程与主进程的状态同步,实时显示复制进度。适用于需要高效批量处理大量小文件或中等大小文件的场景,展示了多进程协作与资源管理的最佳实践。
Python多进程文件夹复制器实现概述
本文通过一个完整的Python示例,展示如何利用进程池技术实现高效的多进程文件夹复制功能。该方案旨在解决单线程复制大量文件时的性能瓶颈问题,适合需要快速备份或迁移大量数据的场景。
多进程文件夹复制器代码详解
应用场景:基于多进程优化的文件夹复制工具
核心代码实现
import multiprocessing
import os
import time
import random
def copy_file(queue, file_name,source_folder_name, dest_folder_name):
"""copy文件到指定的路径"""
f_read = open(source_folder_name + "/" + file_name, "rb")
f_write = open(dest_folder_name + "/" + file_name, "wb")
while True:
time.sleep(random.random())
content = f_read.read(1024)
if content:
f_write.write(content)
else:
break
f_read.close()
f_write.close()
# 发送已经拷贝完毕的文件名字
queue.put(file_name)
def main():
# 获取要复制的文件夹
source_folder_name = input("请输入要复制文件夹名字:")
# 整理目标文件夹
dest_folder_name = source_folder_name + "[副本]"
# 创建目标文件夹
try:
os.mkdir(dest_folder_name)
except:
pass # 如果文件夹已经存在,那么创建会失败
# 获取这个文件夹中所有的普通文件名
file_names = os.listdir(source_folder_name)
# 创建Queue
queue = multiprocessing.Manager().Queue()
# 创建进程池
pool = multiprocessing.Pool(3)
for file_name in file_names:
# 向进程池中添加任务
pool.apply_async(copy_file, args=(queue, file_name, source_folder_name, dest_folder_name))
# 主进程显示进度
pool.close()
all_file_num = len(file_names)
while True:
file_name = queue.get()
if file_name in file_names:
file_names.remove(file_name)
copy_rate = (all_file_num-len(file_names))*100/all_file_num
print("\r%.2f...(%s)" % (copy_rate, file_name) + " "*50, end="")
if copy_rate >= 100:
break
print()
if __name__ == "__main__":
main()
相关Python技术资源推荐
如果您对Python并发编程、数据结构算法、函数技巧、字符串处理、基础进阶教程或数据库操作感兴趣,可进一步查阅本站相关专题文章,如《Python进程与线程操作技巧总结》、《Python数据结构与算法教程》等,以获取更全面的技术支持。
总结
希望上述代码示例及解析能对您的Python编程实践提供有益参考。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









