victory的博客

长安一片月,万户捣衣声

0%

系统编程 | 多进程拷贝文件

多进程拷贝文件

实现流程分析

  1. 获取要copy的文件夹的名字
  2. 创建一个文件夹
  3. 获取old文件夹中的所有的文件名字
  4. 使用多进程方式copy原文件夹中的所有文件到新的文件夹中

Code

from multiprocessing import Pool,Manager
import os
import time

def copyFileTask(name,oldFolderName,newFolderName,queue):
    "complete the function of coping a file"
    fr = open(oldFolderName+"/"+name)
    fw = open(newFolderName+"/"+name,"w")
    content = fr.read()
    fw.write(content)
    fr.close()
    fw.close()
    queue.put(name)

def main():
    #0.get the file name you want to copy
    oldFolderName = input("Please input the file name:")
    #1.create a file directory
    newFolderName = oldFolderName+"-copy"
    #pmrint(newFolderName)
    os.mkdir(newFolderName)
    #2.get all file name of old file directory
    fileNames = os.listdir(oldFolderName)
    #print(fileNames)
    #3.copy all file of old file directory to a new file directory
    pool = Pool(5)
    queue = Manager().Queue()
    for name in fileNames:
        pool.apply_async(copyFileTask,args=(name,oldFolderName,newFolderName,queue))
    num = 0
    allNum = len(fileNames)
    while num < allNum:
        queue.get()
        num += 1
        copyRate = num/allNum
        print("\rcopy process:%.2f%% "%(copyRate*100),end="")
        time.sleep(1)
    print('\ncompleted')
    pool.close()
    pool.join()
if __name__ == "__main__":
    main()