python多程式實現檔案海量複製

南瓜頭777發表於2020-12-20

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()

    #如果拷貝完檔案,那麼就向佇列寫提高訊息,表示已經完成
    q.put(file_name)

def main():
    #1.獲取使用者要copy的資料夾的名字
    old_folder_name = input("請輸入要copy的資料夾的地址(如:C:\\Users\\admin\\Desktop\\爬的東西):")

    #2.建立一個新的資料夾
    try:
        new_folder_name = old_folder_name+'(復件)'
        os.mkdir(new_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_ok_num = 0
    while True:
        file_name = q.get()
        #print('已經完成copy:%s' % file_name)
        print('\r拷貝的進度:%.2f %%' % ((copy_ok_num+1)*100/all_file_num),end='')
        copy_ok_num += 1
        if copy_ok_num >= all_file_num:
            break
if __name__ == '__main__':
    main()

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

相關文章