多线程复制文件
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
#代码来源码云,做个摘抄import os
from os import path
import time
import multiprocessing
from multiprocessing import Manager
import random
def copyfile2(queue,filename,oldfiles,newfiles):
fr = open(oldfiles+"/"+filename,'rb')
fw = open(newfiles+'/'+filename,'wb')
while True:
file_content = fr.read(1024*1024*5)
if file_content:
fw.write(file_content)
else:
break
queue.put(filename)
fr.close()
fw.close()
def main():
oldfiles = input("输入需要拷贝的文件夹:")
if path.isdir(oldfiles):
newfiles = "复制"+oldfiles
if not path.isdir(newfiles):
os.mkdir(newfiles)
print("创建新文件夹成功")
t1 = time.time()
filenames = os.listdir(oldfiles)
po = multiprocessing.Pool(8)
queue = multiprocessing.Manager().Queue()
for filename in filenames:
po.apply_async(copyfile2,args=(queue,filename,oldfiles,newfiles))
po.close()
file_num = 1
file_count = len(filenames)
while True:
if file_num<file_count:
filename = queue.get()
print("%s已经完成复制,完成进度%.2f%%" %(filename,float(file_num/file_count*100)))
else:
break
file_num+=1
po.join()
else:
print("该文件夹不存在")
t2 = time.time()
print("总耗时:%s秒"%str(t2-t1))
if __name__ == '__main__':
main()
浙公网安备 33010602011771号