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 ... 
随机推荐
- IntelliJ IDEA 2017.3-2018.1 全系列汉化包
			JetBrains 系列软件汉化包 关键字: Android Studio 3.0-3.1 汉化包 GoLand 2017.3.2-2018.1 汉化包 IntelliJ IDEA 2017.3-20 ... 
- Spring Framework5.0 学习(3)—— spring配置文件的三种形式
			Spring Framework 是 IOC (Inversion of Control 控制反转)原则的实践. IoC is also known as dependency injection ... 
- 轻量级自动化运维工具Fabric的安装与实践
			一.背景环境 在运维工作中,经常会遇到重复性的劳动,这个时候为了效率就必须要使用自动化运维工具. 这里我给大家介绍轻量级自动化运维工具Fabric,Fabric是基于Python语言开发的,是开发同事 ... 
- ASP.NET SingalR + MongoDB 实现简单聊天室(三):实现用户群聊,总结完善
			前两篇已经介绍的差不多了,本篇就作为收尾. 使用hub方法初始化聊天室的基本步骤和注意事项 首先确保页面已经引用了jquery和singalR.js还有对应的hubs文件,注意,MVC框架有时会将jq ... 
- Redis(RedisTemplate)使用hash哈希
			RedisTemplate配置:https://www.cnblogs.com/weibanggang/p/10188682.html package com.wbg.springRedis.test ... 
- nodejs 做的带管理后台的东东,主要学习到 ....我忘了学到什么了
			效果 http://www.steel-pot.com/ function handleStr(str,isHtml,callback) { if(!isHtml) { callback(str); ... 
- vue 方法相互调用注意事项与详解
			vue在同一个组件内: methods中的一个方法调用methods中的另外一个方法: 可以直接这样调用:this.$options.methods.test(); this.$options.met ... 
- Python 学习笔记(十)Python集合(二)
			集合常用的方法 add() 向集合中增加一个元素,如果集合中已经有了这个元素,那个这个方法就会失效 >>> help(set.add) Help on method_de ... 
- MySQL优化之Explain命令解读
			简述: explain为mysql提供语句的执行计划信息.可以应用在select.delete.insert.update和place语句上.explain的执行计划,只是作为语句执行过程的一个参考, ... 
- MyBatis之Mapper XML 文件详解(四)-JDBC 类型和嵌套查询
			支持的 JDBC 类型为了未来的参考,MyBatis 通过包含的 jdbcType 枚举型,支持下面的 JDBC 类型. BITFLOATCHARTIMESTAMPOTHERUNDEFINEDTINY ... 
