python-15-进程池之文件夹拷贝器

  • 进程池命令

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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值