进程池案例:多任务文件夹复制-显示进度条-理解和分析
2021/11/29 7:08:15
本文主要是介绍进程池案例:多任务文件夹复制-显示进度条-理解和分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
实验环境:linux系统、python3
实验过程:在工作目录下创建一个test文件夹,将实验文件拷贝其中;在工作目录下创建python文件,将以下代码拷贝其中。
建议:若以下代码阅读遇到困难,可以先去主页阅读文章《进程池案例:多任务文件夹复制-理解和分析》
实验分析:(包含在代码注释中)
代码使用者,若有觉得我分析理解不当之处,欢迎评论区指正;
# 导入所需模块 # zhaohaoqi import os import multiprocessing # 将创建的队列对象作为参数传入复制文件的方法中 def copy_file(queue, file_name, old_folder_name, new_folder_name): """完成文件的复制""" # 这里要实现用进度条显示文件复制过程,所以这里通过打印模拟复制过程就可以注释掉了 # print("====>模拟copy文件:从%s---->到%s 文件名是:%s" % (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() # 通过queue调用put()方法将复制好的文件传入到队列中待取 queue.put(file_name) def main(): # 获取用户要copy的文件夹的名字 old_folder_name = input("请输入要copy的文件夹的名字:") # 创建新的文件夹 try: new_folder_name = old_folder_name + "[复件]" os.mkdir(new_folder_name) except: pass # 获取文件夹所有待copy的文件名字 listdir() file_names = os.listdir(old_folder_name) # print(file_names) # 创建进程池 po = multiprocessing.Pool(5) # 创建一个队列 queue = multiprocessing.Manager().Queue() # 向进程池添加copy文件的任务 # 这里将创建的队列对象作为参数传入进程池要执行的方法中。 for file_name in file_names: po.apply_async(copy_file, args=(queue, file_name, old_folder_name, new_folder_name)) po.close() # 因为接下来主进程会因为while循环而不能提前结束,所以进程池对象po无需调用join()方法来堵塞主进程的执行 # po.join() # 调用len()方法获得总共要复制的文件数量 all_file_num = len(file_names) # 创建计时器,原来记录复制完成的文件数量 copy_ok_num = 0 while True: # 每复制完成一份文件,队里中就有一份文件可取 file_name = queue.get() # 每取一次,计数器加一 copy_ok_num += 1 # 将复制进度以百分比的形式打印,实现进度显示 # \r的作用可以实现每次打印将上一次打印的结果覆盖,实现复制进度单行显示 print("\r拷贝的进度为:%.2f %%" % (copy_ok_num*100/all_file_num), end="") # 当全部文件复制完成,跳出循环 if copy_ok_num >= all_file_num: break print() if __name__ == "__main__": main()
这篇关于进程池案例:多任务文件夹复制-显示进度条-理解和分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南