进程,线程,协程,这都是在实际项目中常用的东西,在我的前几篇文章中有讲到过线程,有兴趣的朋友可以去看看
这篇文章我们主要还是通过案例来讲解一下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,成功执行!!!
进程池的案例就分享到这里了