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. Shell,Bash,等脚本学习(有区别)

    二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别.   整数比较   -eq        等于,如:if [ "$a" -eq "$b" ] -n ...

  2. UVa 10384 - The Wall Pushers

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

  3. 使用 Open Live Writer 创建我的第一个博文

    希望能在此记录我的技术开发过程. 请记住我的博客首页为:https://www.cnblogs.com/unrulife/ 期待在博客园遇到志同道合的朋友! 希望在博客园开启技术生涯的新篇章!

  4. Windows环境下ELK简单搭建记录

    前言 ELK已经是一套成熟的日志解决方案,虽然出现了好久,今日才终于研究了一下,不过是在windows平台上安装的. 搭建步骤 下载软件 安装软件 修改配置文件 启动软件 集成测试 下载软件 首先从官 ...

  5. 关于接口返回BOM头处理的问题

    今天用RestClient框架做接口请求.结果请求回来的json转模型失败.提示JSON格式不正确.到BeJson网站验证一下,发现果然不对. 后来得知是由于json信息带着bom头导致的,这个该死的 ...

  6. PAT——1005. 继续(3n+1)猜想 (25)

    卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对n=3进行验证的时候, ...

  7. phpstudy 出现You don't have permission to access / on this server.

    You don't have permission to access / on this server. 去掉vhost文件中的Options FollowSymLinks ExecCGI 第一次发 ...

  8. 在EF Core里面如何使用以前EntityFramework的DbContext.Database.SqlQuery<SomeModel>自定义查询

    问: With Entity Framework Core removing dbData.Database.SqlQuery<SomeModel> I can't find a solu ...

  9. Knowledge Point 20180303 详解main函数

    学习Java的朋友想来都是从HelloWorld学起的,那么想来都对main函数不陌生了,但是main函数究竟是怎么回事呢?main函数中的参数是做什么的呢?main函数为什么能作为程序的入口呢?可不 ...

  10. 听说玩JAVA,必须过JDK这关?

    JDK是什么?JRE是什么?JDK和JRE的区别? Java Runtime Environment (JRE) 包含: Java虚拟机.库函数.运行Java应用程序和Applet所必须文件 Java ...