from multiprocessing import Pool,Managerimport os,sysimport timeimport argparsedef recvParameter():parse = argparse.ArgumentParser()parse.add_argument(-s,--src,dest=src_base_folder,required=Tru...

from multiprocessing import Pool,Manager
import os,sys
import time
import argparse
def recvParameter():
parse = argparse.ArgumentParser()
parse.add_argument("-s","--src",dest="src_base_folder",required=True,help="Enter source folder path")
parse.add_argument("-d","--des",dest="des_base_folder",required=True,help="Enter destination folder path")
parse.add_argument("-p","--pcount",dest="pcount",type=int,default=5,help="The count of process")
args = parse.parse_args()
if not (os.path.isdir(args.src_base_folder) and os.path.isdir(args.des_base_folder)):
print("%s or %s is not exists" %(args.src_base_folder,args.des_base_folder))
sys.exit(-1)
return args
def getTotalSize(dir):
size = 0
for root, dirs, files in os.walk(dir):
size += sum([os.path.getsize(os.path.join(root, name)) for name in files])
return size
def printProcessBar(l):
rate = (sum(l)-l[0])/l[0]
print("\r %.2f%%" %(rate*100),end="")
def fileHandle(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)
if not os.path.exists(des_file_folder):
os.makedirs(des_file_folder)
fw = open(des_file,"w+")
with open(src_file,"r") as f:
while True:
content = f.read(1024)
if not content:
break
fw.write(content)
fw.close()
l.append(os.path.getsize(src_file))
return l
def main():
args = recvParameter()
src_base_folder=args.src_base_folder
des_base_folder=args.des_base_folder
pool = Pool(args.pcount)
begintime = time.time()
manager=Manager()
d = manager.dict()
l = manager.list()
l.append(getTotalSize(src_base_folder))
for base_path,dirs,files in os.walk(src_base_folder):
for file in files:
fileFullName = os.path.join(base_path,file)
pool.apply_async(func=fileHandle,args=(fileFullName,src_base_folder,des_base_folder,l),callback=printProcessBar)
pool.close()
pool.join()
endtime = time.time()
print("\ntotalTime=%s" %(endtime-begintime))
if name == "main":
main()
本文标题为:使用python多进程快速复制文件夹


基础教程推荐
- 云服务器Ubuntu更改默认python版本 2023-09-03
- 创建python虚拟环境(在ubuntu16.04中) 2023-09-04
- Python爬虫爬取属于自己的地铁线路图 2023-08-05
- python验证多组数据之间有无显著差异 2023-08-08
- windows下面使用多版本Python安装指定版本的虚拟环境 2023-09-04
- 远程和Ubuntu服务器进行Socket通信,使用python和C#(准备篇) 2023-09-05
- Python+OpenCV实战之实现文档扫描 2022-10-20
- 使用Pycharm创建一个Django项目的超详细图文教程 2022-09-02
- MySQL数据优化-多层索引 2023-08-11
- linux 安装 python3 2023-09-03