Python多进程文件夹复制器完整实现

一颗松果
一颗松果
发布时间:2026-10-13 | 2人浏览过
原创

本文提供基于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编程实践提供有益参考。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表