1. 程式人生 > 其它 >Python----使用程序池實現多檔案複製並顯示進度條

Python----使用程序池實現多檔案複製並顯示進度條

Python----使用程序池實現多檔案複製並顯示進度條

  1. 主程序向程序池新增copy檔案的內容
  2. 程序池實現copy
  3. 通過設定一個訊息佇列用來實現主程序與子程序的通訊,來顯示進度條
#!/usr/bin/env python
# coding=utf-8
import os 
import multiprocessing

def copy_file(q, file_name, old_folder_name, new_folder_name):
    """完成檔案複製"""
   #  print("=====>模擬copy檔案:從%s----->到%s 檔名是:%s" % (old_folder_name, new_folder_name, file_name))
old_f = open(old_folder_name + "/" + file_name,"rb") content = old_f.read() old_f.close() new_f = open(new_folder_name + "/" + file_name, "wb") new_f.write(content) new_f.close() #如果copy結束,就向佇列中寫入一個訊息,表示已經完成 q.put(file_name) def
main(): # 1. 獲取使用者要copy資料夾的名字 old_folder_name = input("please input copy_folder_name:") # 2. 建立一個新的資料夾 try: new_folder_name = old_folder_name + "[復件]" os.mkdir(old_folder_name + "[復件]") except: pass # 3. 獲取資料夾中所有帶copy檔案的名字 listdir()
file_names = os.listdir(old_folder_name) # print(file_names) # 4. 建立程序池 po = multiprocessing.Pool(5) # 5. 建立一個佇列 q = multiprocessing.Manager().Queue() # 6. 向程序池中新增copy檔案的任務 for file_name in file_names: po.apply_async(copy_file, args=(q, file_name, old_folder_name, new_folder_name)) # 複製原始檔夾中的檔案到新資料夾中的檔案去 po.close() #po.join() # 測一下所有檔案個數 all_file_num = len(file_names) copy_complete_num = 0 while True: file_name = q.get() #print("已經完成copy:%s" % file_name) copy_complete_num += 1 print("\r拷貝進度為: %.2f %%" % (copy_complete_num*100/all_file_num),end="") if copy_complete_num >= all_file_num: break print() if __name__ == "__main__": main()

在這裡插入圖片描述