• 使用python完成多任务复制


    
    

    多任务可以说是多线程,多进程,即在同一时间可以完成多个任务。不管是在python开发过程中还是在其它开发过程中,多线程和多进程开发都是不可缺少的,这不仅仅可以大大提高软件的执行效率,更能方便工具资源的管理。就并发和并行来说,并发不属于多线/进程,并行属于多线/进程。本文,通过使用线程池和消息队列实现了多任务复制的功能以及复制完成百分比的输入。一起来看看如何实现的吧。
    首先:
    为了创建线程池和消息队列引入multiprocessing模块
    为了遍历全部文件导入os模快

    import multiprocessing

    import os

    然后:
    对将要实现的功能进行分析

    获取要拷贝的文件夹名字
    创建一个新的文件夹
    获取文件夹中所有待复制的文件
    创建进程池
    创建队列
    复制原文件夹中的文件复制到新文件夹中去



    最后: 根据我们前期的分析,逐步实现我们的代码,详细代码如下所示
    import os import multiprocessing def copy_file(queue, filename, old_folder_name, new_folder_name): # 以二进制形式打开文件 data = open(old_folder_name + "/" + filename, "rb") # 读取文件 temp = data.read() data.close() # 新建文件,写入源文件内容 new_data = open(new_folder_name + "/" + filename, "wb") new_data.write(temp) new_data.close() # 如果拷贝完一个文件就向队列里写一个消息,表示已经完成 queue.put(filename) def main(): # 1.获取要拷贝的文件夹的名字 old_folder_name = input("请输入要拷贝的文件夹的名字:") # 2.创建一个新的文件夹(文件存在就pass,不存在就创建) try: new_folder_name = "D:demo" os.mkdir(new_folder_name) except: pass # 3.获取文件夹中所有的待copy的文件 os.listdir() file_names = os.listdir(old_folder_name) print(file_names) # 4.创建进程池,多任务执行复制操作 po = multiprocessing.Pool(3) # 5.创建队列 queue = multiprocessing.Manager().Queue() # 6.复制原文件夹中的文件到新的文件夹中 for i in file_names: # print("要拷贝的文件:%s" % i) po.apply_async(copy_file, args=(queue, i, old_folder_name, new_folder_name)) po.close() # 获取所有文件的个数 all_files = len(file_names) # 当前已完成文件个数 current_file = 0 while True: data = queue.get() # print("已经完成:%s 文件的拷贝" % data) # 由于后面已经实现了复制完成的百分比,这里注释了 current_file += 1 print(" 拷贝的进度为:%.2f %%" % ((current_file / all_files) * 100), end="") if current_file >= all_files: break print() if __name__ == '__main__': main()
  • 相关阅读:
    领域驱动和MVVM应用于UWP开发的一些思考
    UWP中实现自定义标题栏
    UWP中新加的数据绑定方式x:Bind分析总结
    MVVM框架从WPF移植到UWP遇到的问题和解决方法
    UWP学习目录整理
    MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息
    MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信
    MVVM设计模式和WPF中的实现(四)事件绑定
    MVVM模式解析和在WPF中的实现(三)命令绑定
    MVVM模式和在WPF中的实现(二)数据绑定
  • 原文地址:https://www.cnblogs.com/liurenli/p/10145819.html
Copyright © 2020-2023  润新知