本节的练习的要求如下:

  • 输入要拷贝文件夹的文件名称
  • 读取该文件夹下的所有文件
  • 启动5个进程来拷贝文件夹,将拷贝成功的文件名称放入队列中
  • 主进程中显示文件拷贝的进度

代码如下:

import multiprocessing
import os
import time
import random def copy_file(q, file_name, source_folder_name, dest_folder_name):
"""拷贝文件"""
# print("正在拷贝文件:%s,%s ==> %s" % (file_name, source_folder_name, dest_folder_name))
f_read = open(source_folder_name + "/" + file_name, "rb")
f_write = open(dest_folder_name + "/" + file_name, "wb") while True:
content = f_read.read(1024)
if content:
f_write.write(content)
else:
break
f_write.close()
f_read.close() time.sleep(random.random()) # 放入已经拷贝完成的文件
q.put(file_name) def main():
# 获取要复制的文件夹名称
source_folder_name = input("请输入要复制的文件夹名称:") # 目标文件夹
dest_folder_name = source_folder_name + "[副本]" if not os.path.exists(dest_folder_name):
os.mkdir(dest_folder_name) # 获取文件夹中的所有普通文件名
file_names = os.listdir(source_folder_name) # 创建Queue
q = multiprocessing.Manager().Queue() # 创建pool
po = multiprocessing.Pool(5) for file_name in file_names:
po.apply_async(copy_file, args=(q, file_name, source_folder_name, dest_folder_name)) po.close() all_file_num = len(file_names)
copy_ok_num = 0 while True: file_name = q.get()
copy_ok_num += 1
print("\r拷贝的进度为:%.2f%%" % (copy_ok_num * 100 / all_file_num), end="") if copy_ok_num >= all_file_num:
break print("") if __name__ == "__main__":
main()

python文件夹copy器(多进程版)的更多相关文章

  1. 文件夹copy器(多进程版)

    import multiprocessing import os import time import random def copy_file(queue, file_name,source_fol ...

  2. 线程_multiprocessing实现文件夹copy器

    import multiprocessing import os import time import random def copy_file(queue,file_name,source_fold ...

  3. Python文件夹备份

    Python文件夹备份 import os,shutil def file_copy(path1,path2): f2 = [filename1 for filename1 in os.listdir ...

  4. Java 实现文件上传、下载、打包、文件copy、文件夹copy。

    文件and文件夹copy package org.test; import java.io.*; public class FileCopy { /** * 复制单个文件 * * @param old ...

  5. 文件Copy和文件夹Copy

    文件Copy和文件夹Copy using System.Collections.Generic; using System.Linq; using System.Text; using System. ...

  6. Python 文件夹及文件操作

    import os import os.path from shutil import copy def copyfile(src, dst): count = 1 for filename in o ...

  7. Colorful(Folders星语多彩文件夹) v1.7绿色版

    软件名称:星语多彩文件夹ColorfulFolders v1.7绿色版软件类别:国产软件运行环境:WinXP/2003/Vista/Win7/Win2008软件语言:简体中文授权方式:免费版软件大小: ...

  8. cad.net 利用win32api实现不重复打开dwg路径的文件夹(资源管理器)

    这里地址的方法也是可用的,但是net3.5不能使用 为此我选择使用win32api的方式来遍历当前桌面所有资源管理器 /// <summary> /// 不重复打开dwg路径的资源管理器 ...

  9. iOS开发文件夹--Copy items if needed

    蓝色文件夹 蓝色文件夹(folder)一般作为资源文件夹使用,与黄色文件夹的主要区别是不参与编译,所以说如果你在这些文件夹下编写的逻辑代码是不参与编译的,其他文件也不能直接引用它们,若引用其中文件需要 ...

随机推荐

  1. Linux下Oracle表空间及用户创建

    记录详细过程以备使用 Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 Connected as sys@i ...

  2. jenkins在windows服务器上执行含git push命令的脚本权限不足的解决方法

    错误摘要 默认情况下执行脚本是没问题的,但是脚本中含有git push命令就无法执行了 用jenkins部署hexo博客时候遇到的,执行hexo d -g一直阻塞至Build was aborted, ...

  3. java单元测试,ssh(spring,struts2,hibernate)框架整合junit4

    step1:导入必须的包,如果是maven项目,直接在pom.xml文件里加入以下依赖包: <dependency> <groupId>junit</groupId> ...

  4. IntelliJ IDEA 常用快捷键使用说明

    Ctrl + / 可以实现单行注释的快速添加和取消.xml和html注释也能操作. Ctrl + Y 删除选中的代码,或者光标所在行,同时删除代码所占的空间. Ctrl + Alt + V 快速抽取变 ...

  5. ajax&bootstrap

    1.ajax 后台 # 通过flask框架搭建后台 from flask import flask,request # 创建一个服务器对象 app = Flask(__name__) # 解决ajax ...

  6. Redis之分布式锁

    目录 一.加锁原因 二.原子操作 三.分布式锁 四.分布式锁常见问题 一.加锁原因 在一些比较高并发的业务场景,经常听到通过加锁的方法实现线程安全. 下面简单介绍一下 1.1 加锁方式 数据库锁 数据 ...

  7. STL::sort函数实现

    声明:本文参考链接:STL::sort实现. 排序是面试中经常被问及的算法基础知识点,虽然实际应用中不会直接使用,但是理解这些简单的算法知识对于更复杂更实用的算法有一定的帮助,毕竟面试总不能问的太过深 ...

  8. Java核心技术及面试指南 2.3.6 String相关的面试题答案

    2.3.6.1 String是最基本的数据类型吗?能不能被继承? String不能被继承,它是一个对象 2.3.6.2 String s = new String("xyz");创 ...

  9. deque源码1(deque概述、deque中的控制器)

    deque源码1(deque概述.deque中的控制器) deque源码2(deque迭代器.deque的数据结构) deque源码3(deque的构造与内存.ctor.push_back.push_ ...

  10. docker - 容器里安装redis

    在docker中安装redis 使用命令行安装redis 下载并解压 wget http://download.redis.io/releases/redis-3.2.6.tar.gz tar -xv ...