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

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

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

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

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

import os
from multiprocessing import Pool,current_process

def 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_file

def 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()

来看一下执行结果
python使用多进程完成文件复制的功能_第1张图片
python使用多进程完成文件复制的功能_第2张图片
ok,成功执行!!!

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

你可能感兴趣的:(python,多进程,进程池)