从多处理导入池,经理
导入操作系统,系统
进口时间进口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)) 代码>
如果<强>名称强>==爸饕?强> >强”:
主要()