1.如何进行开发?

2.版本1:程序大框架

 #1.创建一个文件夹

 #2.获取old文件夹中所有的文件名字

 #3.使用多进程的方式copy原文件夹中的所有文件到新文件夹中

3.版本2:创建一个文件夹

  1)ipython3 获取小知识点

    

  2)写程序

      

  3)测试程序

    

  4)版本2:程序

import os
#1.创建一个文件夹
old_file_name = input("请输入你要copy的文件夹:")
new_file_name = old_file_name + "-附件"
#print(new_file_name)
os.mkdir(new_file_name) #2.获取old文件夹中所有的文件名字 #3.使用多进程的方式copy原文件夹中的所有文件到新文件夹中

4.版本3:获取old文件夹中的所有文件

  1)获取知识点

In [12]: import os

In [13]: os.li
os.linesep os.link os.listdir os.listxattr In [13]: os.listdir("test")
Out[13]:
['17-进程池.py',
'12-multiprocessing.py',
'10-多个Fork.py',
'04-吃包子.py',
'01-多任务.py','08-全局变量.py',
'11-fork多个.py',
'14-join.py',
'09-多个Fork.py',
'02-fork.py']

  2)写程序

      

  3)测试

    

  4)版本3:程序

 import os

 #0.获取要copy的文件夹的名字
old_file_name = input("请输入你要copy的文件夹:") #1.创建一个文件夹
new_file_name = old_file_name + "-附件"
#print(new_file_name)
os.mkdir(new_file_name) #2.获取old文件夹中所有的文件名字 file_names = os.listdir(old_file_name)
# print(file_names) #3.使用多进程的方式copy原文件夹中的所有文件到新文件夹中

5.版本4:模块化

 from multiprocessing import Pool
import os def copyFileTask():
"完成copy一个文件的功能"
pass def main():
#0.获取要copy的文件夹的名字
old_file_name = input("请输入你要copy的文件夹:") #1.创建一个文件夹
new_file_name = old_file_name + "-附件"
#print(new_file_name)
os.mkdir(new_file_name) #2.获取old文件夹中所有的文件名字 file_names = os.listdir(old_file_name)
# print(file_names) #3.使用多进程的方式copy原文件夹中的所有文件到新文件夹中
p = Pool(5)
p.apply_async(xxx) if __name__ == "__main__":
main()

6.版本5:多进程copy文件

  1)初始化版

from multiprocessing import Pool
import os def copyFileTask():
"完成copy一个文件的功能"
fr = open()
fw = open() content = fr.read()
fw.write(content) fw.close()
fr.close() def main():
#0.获取要copy的文件夹的名字
old_file_name = input("请输入你要copy的文件夹:") #1.创建一个文件夹
new_file_name = old_file_name + "-附件"
#print(new_file_name)
os.mkdir(new_file_name) #2.获取old文件夹中所有的文件名字 file_names = os.listdir(old_file_name)
# print(file_names) #3.使用多进程的方式copy原文件夹中的所有文件到新文件夹中
p = Pool(5)
p.apply_async(copyFileTask) if __name__ == "__main__":
main()

  2)查看知识点

In [14]: from multiprocessing import Pool

In [15]: p = Pool(5)

In [16]: p.a
p.apply p.apply_async In [18]: help(p.apply_async)
Help on method apply_async in module multiprocessing.pool:

apply_async(func, args=(), kwds={}, callback=None, error_callback=None) method of multiprocessing.pool.Pool instance
Asynchronous version of `apply()` method.
(END)

  3)版本2:打开关闭对应的文件名

from multiprocessing import Pool
import os def copyFileTask(name,old_file_name,new_file_name):
"完成copy一个文件的功能"
fr = open(old_file_name + "/" + name)
fw = open(new_file_name + "/" + name) content = fr.read()
fw.write(content) fw.close()
fr.close() def main():
#0.获取要copy的文件夹的名字
old_file_name = input("请输入你要copy的文件夹:") #1.创建一个文件夹
new_file_name = old_file_name + "-附件"
#print(new_file_name)
os.mkdir(new_file_name) #2.获取old文件夹中所有的文件名字 file_names = os.listdir(old_file_name)
# print(file_names) #3.使用多进程的方式copy原文件夹中的所有文件到新文件夹中
p = Pool(5)
for name in file_names:
p.apply_async(copyFileTask,args=(name,old_file_name,new_file_name)) if __name__ == "__main__":
main()

  4)2窗口测试

    

  5)调试程序,添加print

  4 def copyFileTask(name,old_file_name,new_file_name):
5 "完成copy一个文件的功能"
6 print(name)
7 fr = open(old_file_name + "/" + name, "r")
8 fw = open(new_file_name + "/" + name, "w")
9
10 content = fr.read()
11 fw.write(content)
12
13 fw.close()
14 fr.close()
15 print("------")
16
python@ubuntu:~/python06/04-多进程copy文件$ python3 copyFile.py
请输入你要copy的文件夹:test
17-进程池.py
------
12-multiprocessing.py
10-多个Fork.py
------
04-吃包子.py
------
07-谁先退出.py
------
01-多任务.py
------
15-Process创建的子进程和父进程的关系.py
20-Queue.py
------
------

  6)调试成功

from multiprocessing import Pool
import os def copyFileTask(name,old_file_name,new_file_name):
"完成copy一个文件的功能"
print(name)
fr = open(old_file_name + "/" + name, "r")
fw = open(new_file_name + "/" + name, "w") content = fr.read()
fw.write(content) fw.close()
fr.close()
print("------") def main():
#0.获取要copy的文件夹的名字
old_file_name = input("请输入你要copy的文件夹:") #1.创建一个文件夹
new_file_name = old_file_name + "-附件"
#print(new_file_name)
os.mkdir(new_file_name) #2.获取old文件夹中所有的文件名字 file_names = os.listdir(old_file_name)
# print(file_names) #3.使用多进程的方式copy原文件夹中的所有文件到新文件夹中
p = Pool(5)
for name in file_names:
p.apply_async(copyFileTask,args=(name,old_file_name,new_file_name))
p.close()
p.join() #主进程要等待子进程 if __name__ == "__main__":
main()
├── copyFile.py
├── test
│   ├── 01-多任务.py
│   ├── 02-fork.py
│   ├── 03-fork2.py
│   ├── 04-吃包子.py
│   ├── 05-fork的返回值.py
│   ├── 06-getppid.py
│   ├── 07-谁先退出.py
│   ├── 08-全局变量.py
└── test-附件
├── 01-多任务.py
├── 02-fork.py
├── 03-fork2.py
├── 04-吃包子.py
├── 05-fork的返回值.py
├── 06-getppid.py
├── 07-谁先退出.py
├── 08-全局变量.py

  

7.版本6:主进程:显示进度条 Queue

    

python@ubuntu:~/python06/04-多进程copy文件$ python3 copyFile.py
请输入你要copy的文件夹:test
copy的进度是:100.00%
已完成copy...
from multiprocessing import Pool,Manager
import os
import time def copyFileTask(name,old_file_name,new_file_name,queue):
"完成copy一个文件的功能"
# print(name)
fr = open(old_file_name + "/" + name, "r")
fw = open(new_file_name + "/" + name, "w") content = fr.read()
fw.write(content) fw.close()
fr.close()
# time.sleep(1) #让进度条显示更加明显
queue.put(name)
#print("------") def main():
#0.获取要copy的文件夹的名字
old_file_name = input("请输入你要copy的文件夹:") #1.创建一个文件夹
new_file_name = old_file_name + "-附件"
#print(new_file_name)
os.mkdir(new_file_name) #2.获取old文件夹中所有的文件名字 file_names = os.listdir(old_file_name)
# print(file_names) #3.使用多进程的方式copy原文件夹中的所有文件到新文件夹中
p = Pool(5)
queue = Manager().Queue() for name in file_names:
p.apply_async(copyFileTask,args=(name,old_file_name,new_file_name,queue)) num = 0
allNum = len(file_names)
while True:
queue.get()
num += 1
copyRate = num/allNum
print("\rcopy的进度是:%.2f%%"%(copyRate*100),end="")
if num == allNum:
break
print("\n已完成copy...") # p.close()
# p.join() #主进程要等待子进程 if __name__ == "__main__":
main()

8.优化版:抛出异常

  • 每次都要删除已经创建的test-附件,对代码进行异常处理,即可
from multiprocessing import Pool,Manager
import os
import time def copyFileTask(name,old_file_name,new_file_name,queue):
"完成copy一个文件的功能"
# print(name)
fr = open(old_file_name + "/" + name, "r")
fw = open(new_file_name + "/" + name, "w") content = fr.read()
fw.write(content) fw.close()
fr.close()
#time.sleep(1) #让进度条显示更加明显
queue.put(name)
#print("------") def main():
#0.获取要copy的文件夹的名字
old_file_name = input("请输入你要copy的文件夹:") #1.创建一个文件夹
new_file_name = old_file_name + "-附件"
#print(new_file_name)
try:
os.mkdir(new_file_name)
except Exception as e:
print("该文件附件已经存在,即将覆盖") #2.获取old文件夹中所有的文件名字 file_names = os.listdir(old_file_name)
# print(file_names) #3.使用多进程的方式copy原文件夹中的所有文件到新文件夹中
p = Pool(5)
queue = Manager().Queue() for name in file_names:
p.apply_async(copyFileTask,args=(name,old_file_name,new_file_name,queue)) num = 0
allNum = len(file_names)
while True:
queue.get()
num += 1
copyRate = num/allNum
print("\rcopy的进度是:%.2f%%"%(copyRate*100),end="")
if num == allNum:
break
print("\n已完成copy...") # p.close()
# p.join() #主进程要等待子进程 if __name__ == "__main__":
main()

    

5 多进程copy文件的更多相关文章

  1. 多进程copy文件

    from multiprocessing import Pool,Manager import os,time def copyFileTask(fileName,oldFolderName,newF ...

  2. Cocos2d-x建工程时避免copy文件夹和库

    方法一:(官方做法) 打开F:\cocos2d-1.0.1-x-0.9.1目录下的cocos2d-win32.vc2010.sln文件,然后右键点击解决方案,选择"添加"—&quo ...

  3. Linux跨用户copy文件

    foo用户home目录下有一文件file.txt,要将其copy至bar用户的home目录.Linux对用户home目录有严格的权限限制,非owner用户或者同group用户无权限读写,除非是root ...

  4. Windows服务器Pyton辅助运维--01.自动Copy文件(文件夹)到远程服务器所在目录

    Windows服务器Pyton辅助运维 01.自动Copy文件(文件夹)到远程服务器所在目录 开发环境: u  Web服务器: Windows Server 2008 R2 SP1 IIS 7.5 u ...

  5. [转]Cocos2d-x建工程时避免copy文件夹和库

    原文链接:  http://www.cnblogs.com/andyque/archive/2011/09/27/2192920.html 在上一篇教程中,我们演示了如何使用VS2010来新建一个工程 ...

  6. 怎么从docker中copy文件到 本机

    怎么从docker中copy文件到 本机 docker cp <containerId>:/file/path/within/container /host/path/target

  7. php利用curl实现多进程下载文件类

    批量下载文件一般使用循环的方式,逐一执行下载.但在带宽与服务器性能允许的情况下,使用多进程进行下载可以大大提高下载的效率.本文介绍PHP利用curl的多进程请求方法,实现多进程同时下载文件. 原理: ...

  8. 从主机系统向虚拟机系统里面copy 文件

    从主机系统向虚拟机系统里面copy 文件: 一:请确保你的虚拟机里面安装了 VMTools 1:安装VMTools 2: 进入虚拟机系统里面,如果没有自动运行 VMtool安装程序,请打开我的电脑,手 ...

  9. Django多进程日志文件问题

    Django多进程日志文件问题 最近使用Django做一个项目.在部署的时候发现日志文件不能滚动(我使用的是RotatingFileHandler),只有一个日志文件. 查看Log发现一个错误消息:P ...

随机推荐

  1. Excel 移动列操作

  2. pypy入门:pypy的安装及使用介绍

    在做python开发的人,应该或多或少的听说过一点pypy吧.我猜.所以就不做背景介绍了,有不懂的同学可以看看这里: 1.什么是pypy: http://www.360doc.com/content/ ...

  3. 通俗易懂的来讲讲DOM——科普性质的DOM入门教程

    DOM这个东西很重要,不过初学的时候很容易蒙,什么Document.Element.Node用官方语言来解释根本就不是人话,只能在实践中硬着头皮一点一点尝试.今天要推荐的是一篇关于DOM的博客.说是教 ...

  4. Cocos2d-x 3.1.1 学习日志3--C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u011292087/article/details/37598919 有关const成员.stati ...

  5. Git bash 终止git log 命令

    Git bash中 可以通过键入: q ,结束该命令.

  6. 【xampp】windows下XAMPP集成环境中,MySQL数据库的使用

    在已经安装了XAMPP之后,会在你安装的目录下面出现”XAMPP“文件夹,这个文件夹就是整个XAMPP集成环境的目录. 我们先进入这个目录,然后会看到带有XAMPP标志的xampp-control.e ...

  7. mac 删除自带 ABC 输入法的方法

    首先需要关闭 mac 系统的 SIP ,不然删不掉,不会关的可以查看我的另一篇文章:mac 关闭系统完整性保护 SIP(System Integrity Protection)的方法 . 关闭 SIP ...

  8. NOIP2018(更新中)

    \(Day_1T_1\) 铺设道路 (Link) 现在你有一个序列,每一个\(i\)有一个深度\(Deep[i]\),现在你可以选择任意的区间,将整个区间的\(Deep\)都减少\(1\).但前提是这 ...

  9. labview

    1.labview适用于测试测量领域,用于快速构建PC端上位机程序 2.例子: 我的电气参数测试仪. 上位机软件比想象的做的快了十几天... 学校的创新基金可以交差了,界面还是个人比较满意了.. 上图 ...

  10. 【oracle笔记3】多表查询

    *多表查询 分类:1.合并结果集 2.连接查询 3.子查询 *合并结果集:要求被合并的表中,列的类型和列数相同. *UNION,去除重复行.完全相同的行会被去除 *UNION ALL:不去除重复行. ...