原文链接

python多进程实现文件海量快速复制

直接上代码 :

  1. # -*- coding:UTF-8 -*-
  2. import os
  3. import multiprocessing
  4. def copy_file(q,file_name,old_folder_name,new_folder_name):
  5. '''完成文件的复制'''
  6. # print('======>模拟copy文件:从%s--->%s 文件名是:%s' % (old_folder_name,new_folder_name,file_name))
  7. old_f = open(old_folder_name+'/'+file_name,'rb')
  8. content = old_f.read()
  9. old_f.close()
  10. new_f = open(new_folder_name+'/'+file_name,'wb')
  11. new_f.write(content)
  12. new_f.close()
  13. #如果拷贝完文件,那么就向队列写提高消息,表示已经完成
  14. q.put(file_name)
  15. def main():
  16. #1.获取用户要copy的文件夹的名字
  17. old_folder_name = input("请输入要copy的文件夹的地址(如:C:\\Users\\admin\\Desktop):")
  18. #2.创建一个新的文件夹
  19. try:
  20. new_folder_name = old_folder_name+'(复件)'
  21. os.mkdir(new_folder_name)
  22. except:
  23. pass
  24. #3获取文件夹的所有的待copy的文件名字 listdir()
  25. file_names = os.listdir(old_folder_name)
  26. #print(file_names)
  27. #4.创建进程池
  28. po = multiprocessing.Pool(5)
  29. #5.创建一个队列
  30. q = multiprocessing.Manager().Queue()
  31. #6.向进程池中添加copy文件的任务
  32. for file_name in file_names:
  33. po.apply_async(copy_file,args=(q,file_name,old_folder_name,new_folder_name))
  34. po.close()
  35. #po.join()
  36. all_file_num = len(file_names) #计算文件总数
  37. copy_ok_num = 0
  38. while True:
  39. file_name = q.get()
  40. #print('已经完成copy:%s' % file_name)
  41. print('\r拷贝的进度:%.2f %%' % ((copy_ok_num+1)*100/all_file_num),end='')
  42. copy_ok_num += 1
  43. if copy_ok_num >= all_file_num:
  44. break
  45. if __name__ == '__main__':
  46. main()

如有疑问可移步:
多进程:https://blog.csdn.net/weixin_44840774/article/details/111399723
进程池:https://blog.csdn.net/weixin_44840774/article/details/111408921