• 利用Pool和Queue创建的多文件复制器


    1、准备

      本地创建一个测试文件夹

    mkdir test

      将大量文件复制进入测试文件夹,作测试用

    cp /usr/bin/python3.6/* ./test/

    2、写入代码

    import os
    import multiprocessing
    
    def copy_file(que,file_name,old_folder_name,new_folder_name):
        """完成文件的复制"""
        # print("->>>>>模拟复制文件:从{}拷贝到{},文件名是{}".format(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()
    
        # 如果拷贝完成了文件,那么就向队列中写入一个消息,表示已经完成
        que.put(file_name)
    
    def main():
        # 获取用户要copy的文件夹的名字
        old_folder_name = input('请输入要copy的文件夹的名字:')
        # 创建一个新的文件夹
        try:
            new_folder_name = old_folder_name+"(1)"
            os.mkdir(new_folder_name)
        except:
            pass
        # 获取文件夹的所有的待copy的文件名字 listdir()
        filename_waitting_by_copy = os.listdir(old_folder_name)
        # 创建进程池
        po = multiprocessing.Pool(10)
        # 创建一个队列
        que = multiprocessing.Manager().Queue()
        # 想进程池中添加copy文件的任务
        for file_name in filename_waitting_by_copy:
            po.apply_async(copy_file,args=(que,file_name,old_folder_name,new_folder_name))
    
        po.close()
        # po.join()
        all_file_num = len(filename_waitting_by_copy)
        copy_completed_num = 0
        while True:
            file_name =que.get()
            copy_completed_num+=1
            progress_bar = (copy_completed_num*100/all_file_num)
            # print('已经完成{}的复制===>>>>>>进度为{:.2f}%%'.format(file_name,progress_bar))
            print('
    进度为{:.2f}%%'.format(progress_bar),end='')
            if copy_completed_num>=all_file_num:
                break
        print()
    
    if __name__=='__main__':
        main()

    3、模拟运行

      

       完成

  • 相关阅读:
    ps切图保存所有切片为png
    指法练习 V1.0_haley(指法练习工具)
    zoj 4020 The 18th Zhejiang University Programming Contest Sponsored by TuSimple
    CF 某套题 O :Grid (简单BFS)
    codeforces 某套题s : surf(贪心 || 动态规划)
    STL模板整理 全排列
    STL模板整理 priority_queue
    STL模板整理 pair
    STL模板整理 set
    第八届省赛 B:Quadrat (打表找规律)
  • 原文地址:https://www.cnblogs.com/nuochengze/p/12639596.html
Copyright © 2020-2023  润新知