多线程复制文件

#!/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()
 

posted on 2023-11-24 17:47  JPGer  阅读(13)  评论(0)    收藏  举报

导航