利用python多線程實現拷貝文件夾的文件

import multiprocessing 

import threading

import os

import time

import random

import sys


def copy_file(queue,file_name,source_folder_name,dest_folder_name):

    #print('正在複製:%s' % file_name)

    if os.path.isdir(source_folder_name + '/' + file_name):

        queue.put(file_name)

        return

    if not os.path.exists(dest_folder_name):

        os.mkdir(dest_folder_name)

    data_file = open(source_folder_name + '/' + file_name,'rb')

    cp_file = open(dest_folder_name + '/' + file_name,'wb')

    while True:

        content = data_file.read(4096)

        if len(content) == 0:

            break

        cp_file.write(content)

    data_file.close()

    

    cp_file.close()

    #print('%s文件複製完成!' % file_name)

    queue.put(file_name)

    


def main():

    

    source_folder_name = input("請輸入文件夾:")


    dest_folder_name = source_folder_name +"附件"


    file_names = os.listdir(source_folder_name)


    #創建一個隊裏

    queue = multiprocessing.Manager().Queue(128)

    #創建進程池

    p = multiprocessing.Pool(1)

    for file_name in file_names:

        #print('put file_name %s' % file_name)

        p.apply_async(copy_file,args=(queue,file_name,source_folder_name,dest_folder_name))

    

    

    p.close()

    #p.join()

    

    all_file_nums = len(file_names)

    while True:

        file_name = queue.get()

        if file_name in file_names:

            file_names.remove(file_name)

        copy_rate = (all_file_nums - len(file_names)) *100 /all_file_nums

        print("\r%.2f=========>(%s) (%0.2f/%0.2f)" % (copy_rate, file_name,len(file_names),all_file_nums) + " " * 50,end="")

        #\r 默認表示將輸出的內容返回到第一個指針,這樣的話,後面的內容會覆蓋前面的內容

        #sys.stdout.flush()


        #if len(file_names) < 5:

        #    print("remaining: %s" % file_names)

        if copy_rate >= 100:

            break

    print('拷貝文件完成!')


if __name__ == "__main__":

     main()


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章