简版多进程文件夹copy器

在学习python多进程后,为了能快速掌握其中的知识点,就写了一个简单的多进程文件copy器。

主要的功能:在输入想要复制的文件后就会自动形成一个复制好的文件,还会有传输进度条显示。
如果复制的文件夹已存在,就会向你提醒然后重新输入你要复制的文件夹。
缺点:只能复制不含有文件夹的文件夹,且只能在该.py文件的目录下进行复制

以下就是代码演示:

"""
文件copy器,多进程之进程池版
"""from multiprocessing import Manager, Poolimport os# 创建执行任务进程
def copy_file(q, user_input, file_name, new_1dir):# 打开文件列表对应文件f = open(user_input + '/' + file_name, 'rb')# 读取文件数据data_ = f.read()# print(data_)f.close()# 将读取的文件数据写入到复制的文件夹里w = open(new_1dir + '/' + file_name, 'wb')w.write(data_)w.close()# 在一个文件完成复制后,就会向Queue里面放入一个该文件完成的消息q.put(file_name)new_dir = 0def main():# 用户输入要复制的文件夹名global new_diruser_input = input('请输入要复制的文件夹名:')try:# 创建复制的文件夹new_dir = user_input + '[复件]'os.mkdir(new_dir)except:pass# 打开对应文件夹获得文件列表file_name = os.listdir(user_input)# 创建进程池p = Pool(10)# 创建queue队列q = Manager().Queue()# 遍历文件列表获得任务for task in file_name:# 往文件池里添加任务p.apply_async(copy_file, args=(q, user_input, task, new_dir))# 关闭进程池p.close()# p.join()all_file_len = len(file_name)copy_finish = 0while True:# print(q.empty())task = q.get()# print('已完成copy:%s' % task)copy_finish += 1# 进度条显示print("\r已完成传输%.2f" % (copy_finish * 100/all_file_len), end='%')if copy_finish >= all_file_len:breakif __name__ == '__main__':main()

运行结果如下:


在写这个代码的过程中有一个疏忽性的问题,导致我浪费了很多时间:

就是读取原有文件夹的文件数据时,我没有设置一个变量去将读取的数据临时存储起来。而是直接将读取的数据以f.read()形式放入到复制的文件夹在写文件过程中的w.write()里面去,这样就产生了几个问题:

  1. 复制出来的文件夹里面的文件是个空文件。

  2. 程序的一个子进程卡死在w.write()这里,不会再向下执行。这样导致进程间的通信Queue无法放入消息,
    那么程序就陷入到了一个死循环的状态,无法结束主进程。

python学习之多进程小练笔:简版多进程文件夹copy器相关推荐

  1. 小猿圈Python学习教程之后端接收前端回传的文件方法

    现在人工智能已经深入到千家万户,随之而来的就是python技术的火爆,今天小猿圈python讲师为你讲解一下后端接收前端回传的文件方法,希望对于刚刚自学python的你有一定的帮助. 如下所示: fi ...

  2. Python学习笔记编程小哥令狐~持续更新、、、

    Python学习笔记~编程小哥令狐 文章目录 Python学习笔记~编程小哥令狐 一.Python运行发生情况 二.变量 2.1变量引入前说明 2.2变量的命名和使用 2.3字符串 2.3.1使用方法 ...

  3. python编程第5版_正版 Python学习手册(原书第5版) python编程从入门到精通 python入门 计算机网络...

    上册 前言1 部分使用入门 章问答环节21 人们为何使用Python21 软件质量22 开发者效率23 Python是一门"脚本语言"吗23 好吧,Python的缺点是什么25 如 ...

  4. Python学习小组课程P2-Python基础(2)文件操作

    一.前言 注意:此为内部小组学习资料,非售卖品,仅供学习参考. 本系列课程: Python学习小组课程-课程大纲与Python开发环境安装 Python学习小组课程P1-Python基础(1)语法与数 ...

  5. win7文件夹图标中多了一把小锁打不开文件夹怎么办?

    win7文件夹图标中多了一把小锁打不开文件夹怎么办? 解决办法一:右击目录→取得管理员权限!该方法适用于win7旗舰版. 解决办法二:右击目录→属性→安全→高级→选择everyone→更改权限→勾上完 ...

  6. win10小课堂:如何给文件夹加密?

    win10小课堂:如何给文件夹加密? 1.工具下载 工具下载链接:https://pan.baidu.com/s/1GCR14dSPWszCDJsQVty2pw 提取码:k4y4 2.鼠标右击[022 ...

  7. python爬取明星百度图片并存入本地文件夹

    python爬取明星百度图片并存入本地文件夹 想要一个明星图片的时候,发现图片量过大,一张张保存太累,不太现实 这时候就可以用到爬虫,批量爬取图片 现在又出现一个问题,当发现一个明星爬完后,再爬取下一 ...

  8. 自制C#版3DS文件的解析器并用SharpGL显示3DS模型

    阅读目录(Content) 3DS文件格式 块(Chunk)的结构 解析结果 自制C#版3DS文件的解析器并用SharpGL显示3DS模型 我已经重写了3ds解析器,详情在此(http://www.c ...

  9. Python技术分享:Python学习的一些小技巧

    "人生苦短,我选Python".那么,你真的掌握了Python吗?下面小千为大家介绍初学Python的17个学习小技巧! 1.交换变量 有时候,当我们要交换两个变量的值时,一种常规 ...

最新文章

  1. Linux C连接Mysql
  2. linux sw状态,linux 下查看性能状态命令
  3. struts2中解决下载文件名中文乱码问题
  4. 树莓派上搭建Git服务器
  5. Athentech Perfectly Clear中文版
  6. leetcode 108. Convert Sorted Array to Binary Search Tree | 108. 将有序数组转换为二叉搜索树(Java)
  7. c语言知道坐标求线段长度,C语言编写程序:输入任意3线段的长度,判断组成三角形的种类...
  8. 大公司青睐的50款开源工具
  9. 木马藏身于系统进程中
  10. python selenium_自动化测试:Selenium+Python环境搭建
  11. 可能比文档还详细--VueRouter完全指北
  12. Java_8函数式编程pdf
  13. Python学习笔记(语句)
  14. BZOJ 4241 历史研究
  15. oracle查看asm磁盘,OracleOnLinux-Windows下如何查看ASM磁盘对应的设备
  16. linux系统下已分好区的磁盘如何删除,linux下如何删除磁盘分区
  17. Unity小游戏算法分析与实现(Unity+XR+游戏开发+算法+MVC+斗地主+耳轮跳+见缝插针+王者荣耀+绝地求生+立钻哥哥+==)
  18. AUTOSAR 基础知识简介
  19. 个人实名认证的几种方案
  20. Excel按类别进行自动编号

热门文章

  1. Android 驱动MIPI CSI 使用
  2. 一个C程序辨别系统是64位还是32位
  3. 年中总结 | 经历过求职春招刷题备考疫情洪水的一届毕业预备军真的太太太难啦!
  4. 引导盘的引导文件在哪
  5. kali Linux2019.4安装中文(Google)输入法教程
  6. 高等数学——二重积分
  7. fiddler使用教程以及工作原理
  8. Miss Parcelable
  9. java mahout使用教程_Mahout使用简例
  10. 【Java】自然对数的求法