zoukankan      html  css  js  c++  java
  • 使用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()
  • 相关阅读:
    [转]c++访问python3-实例化类的方法
    【转】利用Boost.Python将C++代码封装为Python模块
    [转]Linux下Python与C++混合编程
    [转]Windows下使用VS2015编译openssl库
    [转]boost::python开发环境搭建
    [转]linux下编译boost.python
    [转]阿里巴巴十年Java架构师分享,会了这个知识点的人都去BAT了
    [转]Python3《机器学习实战》学习笔记(一):k-近邻算法(史诗级干货长文)
    [转]马上2018年了,该不该下定决心转型AI呢
    [转]PostgreSQL命令行使用手册
  • 原文地址:https://www.cnblogs.com/liurenli/p/10145819.html
Copyright © 2011-2022 走看看