zoukankan      html  css  js  c++  java
  • python利用进程池,多进程拷贝文件

    #!/usr/bin/evn python
    #Author:ELSON_ZENG
    
    import os,time
    import multiprocessing
    
    
    def copy_file(queue, file_list, old_folder_name, new_folder_name ):
        """完成文件的复制"""
        #print("===>copy文件:从%s ---> %s 文件名是:%s" %(old_folder_name, new_folder_name,file_list))
        f_read =  open(os.path.join(old_folder_name,file_list),'rb')
        f_write = open(os.path.join(new_folder_name,file_list),'wb')
        while True:
            content = f_read.read(1024)
            if content:
                f_write.write(content)
            else:
                break
        f_write.close()
        f_read.close()
        #拷贝完文件,那么就想队列中写入一个消息
        queue.put(file_list)
    
    
    def main():
        #1、获取用户要copy的文件夹的名字
        old_folder_name = input("请输入要copy的文件夹名字:")
        proccess_num = int(input("请输入要开启的进程数量:"))
        #2、创建一个新的文件夹
        try:
            new_folder_name = old_folder_name + '_RS'
            os.mkdir(new_folder_name)
        except:
            pass
    
        #3、获取文件夹的所有的待copy的文件名字 listdir()
        file_lists = os.listdir(old_folder_name)
    
        #4、创建进程池
        p = multiprocessing.Pool(proccess_num)
        # 5、 创建队列
        queue = multiprocessing.Manager().Queue()
    
        #5、向进程池中添加copy文件的任务
        for file_list in file_lists:
            p.apply_async(copy_file, args=(queue, file_list, old_folder_name, new_folder_name ))
    
        print('-----start-----')
        p.close()
        start_time = time.time()
        #p.join()
        file_num = len(file_lists)
        copy_num = 0
        while True:
            file_name = queue.get()
            copy_num += 1
            stop_time = time.time()
            print('
    拷贝进度为 %.2f %%, 总耗时 %d 秒。' %(copy_num/file_num*100,stop_time - start_time),end = '')
            if file_num == copy_num:
                break
        print('
    -----stop------')
    
    
    if __name__ == "__main__":
        main()
    

      

  • 相关阅读:
    关于C#登录三层
    SQL 语句关于分页的写法
    C# 如何去掉button按钮的边框线
    20151220
    继承
    对象的旅行
    多态
    封装
    OO大原则
    javascript
  • 原文地址:https://www.cnblogs.com/elson-zeng/p/13474437.html
Copyright © 2011-2022 走看看