使用python多进程快速复制文件夹

  

从多处理导入池,经理
导入操作系统,系统
进口时间进口argparse


  

def recvParameter ():
解析=argparse.ArgumentParser ()
解析。add_argument (“s”,“——src”, dest=皊rc_base_folder”,要求=True,帮助=笆淙朐次募新肪丁?
解析。add_argument (“- d”,“——des”, dest=癲es_base_folder”,要求=True,帮助=笆淙肽勘晡募新肪丁?
解析。add_argument (“p”,“——pcount dest=皃count=int类型,默认=5,帮助=肮獭钡氖?=parse.parse_args
args ()
如果不是(os.path.isdir (args.src_base_folder)和os.path.isdir (args.des_base_folder)):
打印(“%或%年代并不存在“% (args.src_base_folder args.des_base_folder))
sys.exit (1)
返回参数

  

def getTotalSize (dir):
大?0
根,dirs,文件os.walk (dir):
大小+=([os.path.getsize (os.path求和。加入(根、名称))在文件名称])


返回大小   

def printProcessBar (l):
率=((左)和- l [0])/l [0]
打印(“\ r %。2 f % % %(率* 100),结束=" ")

  

def文件句柄(fileFullName, src_base_folder des_base_folder, l):
src_file=fileFullName
des_file=fileFullName.replace (src_base_folder des_base_folder)
des_file_folder=os.path.dirname (des_file)
如果不是os.path.exists (des_file_folder):
os.makedirs (des_file_folder)
fw=开放(des_file,“w +”)
张开(src_file,“r”) f:
而真实:
内容=f.read (1024)
如果没有内容:

fw.write休息(内容)
fw.close ()
l.append (os.path.getsize (src_file)) l


返回   

def main ():
参数=recvParameter ()
src_base_folder=args.src_base_folder
des_base_folder=args.des_base_folder
池=池(args.pcount)
begintime=time.time ()
经理=经理()
d=manager.dict ()
l=manager.list ()
l.append (getTotalSize (src_base_folder))
base_path, dirs,文件os.walk (src_base_folder):
的文件文件:
fileFullName=os.path.join (base_path、文件)
pool.apply_async (func=文件句柄,arg游戏=(fileFullName, src_base_folder des_base_folder, l),回调=printProcessBar)

  
 <代码> pool.close ()
  pool.join ()
  endtime=time.time ()
  打印(“\ ntotalTime=% s”% (endtime-begintime))  
  

如果<强>名称==爸饕?强> 强”:
主要()

使用python多进程快速复制文件夹