热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python使用多进程完成文件复制的功能

进程,线程,协程,这都是在实际项目中常用的东西,在我的前几篇文章中有讲到过线程,有兴趣的朋友可以去看看这篇文章我们主要还是通过案例来讲解

进程,线程,协程,这都是在实际项目中常用的东西,在我的前几篇文章中有讲到过线程,有兴趣的朋友可以去看看

这篇文章我们主要还是通过案例来讲解一下python中的进程

python中进程的启用方式也有很多种,
1,通过定义函数调用
2,通过类实现
3,通过进程池实现
以上的几种方法都可以

接下来来看一下我们的案例

import os
from multiprocessing import Pool,current_processdef copy_file(new_file): #先定义进程要执行的任务函数print('{}开始复制'.format(current_process().name)) #打印当前进程的名字if os.path.isfile(new_file): #使用os模块判断当前传入 的是否为文件f = open(new_file, 'r', encoding='gbk') #打开文件,windows下以gbk编码打开t1 = new_file.rpartition('.') #以文件名右边第一个点为参考进行切割,切成三个元组new_file2 = t1[0] + '(附件)' + t1[1] + t1[2] #重新拼接处复制文件的名称f1 = open(new_file2, 'w', encoding='utf-8') #读取源文件内容,打开一个新文件,并写入内容content = f.read()f1.write(content)f.close()f1.close()elif os.path.isdir(new_file): #如果不是文件,而是目录file_list = os.listdir(new_file) #列出目录内所有的文件或目录名称for file in file_list:new_file2 = new_file + '/' + file #重新拼接名称copy_file(new_file2) #递归return new_filedef alert(new_file): #定义回调函数print('{}复制完成'.format(new_file))if __name__ == '__main__':pool = Pool() #实例化进程池dir_path = 'D:/copytest' #选择要进行复制的文件夹的路径file_list = os.listdir(dir_path) #列出文件夹内所有文件或目录的名称print(file_list)for file in file_list:new_file = dir_path+'/'+file #拼接其内文件或目录的名称,获得绝对路径pool.apply_async(copy_file,args=(new_file,),callback=alert) #异步执行任务,并指定回调函数# pool.apply(copy_file, args=(new_file,))pool.close()pool.join()

来看一下执行结果
在这里插入图片描述
在这里插入图片描述
ok,成功执行!!!

进程池的案例就分享到这里了


推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
author-avatar
手机用户2502860581
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有