多进程拷贝文件
实现流程分析
- 获取要copy的文件夹的名字
- 创建一个文件夹
- 获取old文件夹中的所有的文件名字
- 使用多进程方式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()