- 进程池命令
1.导入模块
import ,multiprocessing
2.创建进程池
pool=multiprocessing.Pool(3)
3 . 指派函数并开始执行
pool.apply.ansy(函数名,(参数1,参数2,…)) / 异步方式,进程同时工作
pool.apply(函数名,(参数1,参数2,…)) / 同步方式,只有一个进程工作,且有序执行
4· 查看当前进程池名称,id
print(multiprocessing.current_process()) / 查看当前进程名称
print(multiprocessing.current_process().pid) / 查看当前进程id
5 . 任务完成后,关闭进程池
multiprocessing.close() */ 使进程池不再接收新的任务 *
6 . 主进程等待进程池完成
pool.join() /让主进程等待进程池中所有进程结束后再结束。同步方式下不用写,由于主进程的特性,当发现有一个子进程结束便结束,而同步方式是有序的,当进程池中最后一个进程完成了任务,便结束了进程池,主进程发现后便结束任务了;而异步方式中有多个进程在同时运行,主进程发现其中一个进程结束后就结束了,而此时还有其他进程没有完成任务,所以需要添加 pool.join 来让主进程等待进程池结束。
- 创建文件夹拷贝器多进程版
import os,shutil,multiprocessing
def copy_func(source_dir,dest_dir,file_name):
print(multiprocessing.current_process()) # 查看当前运行的进程名称
source_path=source_dir+'/'+file_name # 拼接出 源文件 地址
dest_path=dest_dir+'/'+file_name # # 拼接出 目标文件 地址
with open(source_path,'rb')as file_source:
with open(dest_path,'wb')as file_dest:
while True:
content=file_source.read(1024)
if content: # 判断是否读完文件内容
file_dest.write(content)
else:
print('%s读取完成' % file_name)
break
if __name__ == '__main__':
pool=multiprocessing.Pool(3) # 创建进程池,包含3个进程
if os.path.isdir('./text1'): # 判断文件夹是否存在,这是为了避免在测试的时候不断创建删除而优化的操作
shutil.rmtree('./text1')
print('删除了文件夹')
os.mkdir('./text1')
source_dir='./text' # 源文件夹 地址
dest_dir='./text1' # 目标文件夹 地址
file_name_pwd=os.listdir(source_dir) # 获取源文件夹中所有文件的名字列表
for file_name in file_name_pwd:
pool.apply_async(copy_func,(source_dir,dest_dir,file_name)) # 进程池应用函数,并启动
pool.close()
pool.join()