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. Java 中 Vector 和 ArrayList 的区别

    首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList.Vector和LinkedList.List用于存放多个元素,能够维护元素的次序,并且允许元素的重复.3个具体 ...

  2. Springmvc 进行数据类型转换

    SpringMVC进行一些常用的数据类型转换,这里以Date 数据类型的转换为例. SpringMVC表单中输入日期,一般都是以字符串的形式输入,如何将字符形式的日期转换为Date 类型的呢?这里只需 ...

  3. 对HandlerExecutionChain类的理解分析

    HandlerExecutionChain类比较简单,好理解. ==================================================================== ...

  4. UVa 10817 - Headmaster's Headache(状压DP)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  5. BZOJ2431:[HAOI2009]逆序对数列(DP,差分)

    Description 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的 数列,可以很容易求出有多少个逆序对数.那么逆 ...

  6. [转]asp.net Request、Response 响应在此上下文中不可用

    这个问题一般是在页面中使用了Respons.Write()方法,虽然是继承了System.Web.UI.Page.但System.Web.UI.Page下的Response只有在asp.net页面里才 ...

  7. 【题解】UVA10298 Power String(KMP)

    UVA10298:https://www.luogu.org/problemnew/show/UVA10298 思路 设P[x]数组为 前x个字符的最大前缀长度等于后缀字串 由P数组的定义我们可以知道 ...

  8. The App Life Cycle & The Main Function

    The App Life Cycle Apps are a sophisticated interplay between your custom code and the system framew ...

  9. java 中的懒汉单例和饿汉单例模式

    //-------------------------------------------------------------饿汉模式--开始----------------------------- ...

  10. 给requests模块添加请求头列表和代理ip列表

    Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,符合了Python语言的思想,通俗的说去繁存 ...