5 多进程copy文件
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文件的更多相关文章
- 多进程copy文件
from multiprocessing import Pool,Manager import os,time def copyFileTask(fileName,oldFolderName,newF ...
- Cocos2d-x建工程时避免copy文件夹和库
方法一:(官方做法) 打开F:\cocos2d-1.0.1-x-0.9.1目录下的cocos2d-win32.vc2010.sln文件,然后右键点击解决方案,选择"添加"—&quo ...
- Linux跨用户copy文件
foo用户home目录下有一文件file.txt,要将其copy至bar用户的home目录.Linux对用户home目录有严格的权限限制,非owner用户或者同group用户无权限读写,除非是root ...
- Windows服务器Pyton辅助运维--01.自动Copy文件(文件夹)到远程服务器所在目录
Windows服务器Pyton辅助运维 01.自动Copy文件(文件夹)到远程服务器所在目录 开发环境: u Web服务器: Windows Server 2008 R2 SP1 IIS 7.5 u ...
- [转]Cocos2d-x建工程时避免copy文件夹和库
原文链接: http://www.cnblogs.com/andyque/archive/2011/09/27/2192920.html 在上一篇教程中,我们演示了如何使用VS2010来新建一个工程 ...
- 怎么从docker中copy文件到 本机
怎么从docker中copy文件到 本机 docker cp <containerId>:/file/path/within/container /host/path/target
- php利用curl实现多进程下载文件类
批量下载文件一般使用循环的方式,逐一执行下载.但在带宽与服务器性能允许的情况下,使用多进程进行下载可以大大提高下载的效率.本文介绍PHP利用curl的多进程请求方法,实现多进程同时下载文件. 原理: ...
- 从主机系统向虚拟机系统里面copy 文件
从主机系统向虚拟机系统里面copy 文件: 一:请确保你的虚拟机里面安装了 VMTools 1:安装VMTools 2: 进入虚拟机系统里面,如果没有自动运行 VMtool安装程序,请打开我的电脑,手 ...
- Django多进程日志文件问题
Django多进程日志文件问题 最近使用Django做一个项目.在部署的时候发现日志文件不能滚动(我使用的是RotatingFileHandler),只有一个日志文件. 查看Log发现一个错误消息:P ...
随机推荐
- springMVC文件上传大小超过限制的问题
[转自]https://my.oschina.net/ironwill/blog/646762 springMVC是一个非常方便的web层框架,我们使用它的文件上传也非常的方便. 我们通过下面的配置来 ...
- Codeforces Round #527 (Div. 3) F. Tree with Maximum Cost 【DFS换根 || 树形dp】
传送门:http://codeforces.com/contest/1092/problem/F F. Tree with Maximum Cost time limit per test 2 sec ...
- CVPR 2016 paper reading (3)
DeepFashion: Powering Robust Clothes Recognition and Retrieval with Rich Annotations, Ziwei Liu, Pin ...
- CentOS gitlab 安装配置
CentOS gitlab 安装配置 2018-11-02 11:23:09 Visit 5 在/etc/yum.repos.d 目录下创建文件gitlab-ce.repo,使用国内的安装源 b ...
- MVC学习十:MVC 特性作用和MVC 验证
根据代码分析特性用处 [DisplayName("学员名")] [DataType(DataType.Text)] [StringLength(,ErrorMessage=&quo ...
- java多线程注意事项
1:继承thread和实现Runnable创建线程的区别: 继承thread创建的对象直接start()就可以就绪,但是使用Runnable所new出来的对象要先new Thread(xx)才能sta ...
- 课时53.video标签第二种格式(掌握)
由于视频数据非常非常的重要,所以五大浏览器厂商都不愿意支持别人都视频格式,所以导致了没有一种视频格式是所有浏览器都支持的,这个时候W3C为了解决这个问题,所以推出了第二种video标签的格式 如何查看 ...
- Canvas制作的下雨动画
简介 在codepen上看到一个Canvas做的下雨效果动画,感觉蛮有意思的.就研究了下,这里来分享下,实现技巧.效果可以见下面的链接. 霓虹雨: http://codepen.io/natewile ...
- react系列(二)高阶组件-HOC
高阶组件 简单来说,高阶组件可以看做一个函数,且该函数接受一个组件作为参数,并返回一个新的组件. 我在之前的博客<闭包和类>中提到一个观点,面向对象的好处就在于,易于理解,方便维护和复用. ...
- Xcode 怎么查看代码总行数
打开终端 输入 cd 空格 你的工程路径这里有一个小技巧,你把要统计的文件夹直接拖住拖到终端里,路径就出来了.然后输入find . -name "*.m" -or -name &q ...