python的多进程(第三篇)进程池的理解和使用

什么是进程池

  • 当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态生成多个进程,如果是上百个甚至上千个目标,收订的去创建进程的工作量巨大,此时就可以用到multiprocess模块提供的Pool方法
  • 初始化Pool时,可以指定一个最大进程数,当有新的请求提交到Pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求
  • 如果池中的进程数已经达到指定的最大值,那么该请求就会等待,知道池中有进程结束,才会用之前的进程来执行新的任务。
  • 池子里面放的是进程,进程池会根据任务执行情况自耦东创建进程,而且尽量少创建进程,合理利用进程池中的进程完成多任务

python怎么使用进程池

import multiprocessing
import time


# 拷贝任务
def work():
    print("复制中...", multiprocessing.current_process().pid)
    time.sleep(0.5)

if __name__ == '__main__':
    # 创建进程池
    # 3:进程池中进程的最大个数
    pool = multiprocessing.Pool(3)
    # 模拟大批量的任务,让进程池去执行
    for i in range(5):
        # 循环让进程池执行对应的work任务
        # 同步执行任务,一个任务执行完成以后另外一个任务才能执行
        pool.apply(work)
  • 运行结果
复制中... 100512
复制中... 68128
复制中... 98924
复制中... 100512
复制中... 68128

解释

  • 当程序第四次运行时,其实他的进程号和第一个程勋运行的是一样的,因为我之前就设定了最大的进程池数量为3,这样多个进程运行时,会以3位周期,进行循环的运行
  • pool.apply()是同步执行进程
  • 通过进程池创建的进程是守护主进程的状态
  • 通过Process创建的进程是不会守护主进程的状态

进程的异步执行任务

  • 进程池异步执行任务表示进程池中的进程同时执行任务,进程之间不会等待
  • 上面已近说了进程池执行任务默认是守护主进程,所以需要所有的进程完成,需要对主进程进行阻塞
  • 代码实例
    在这里插入图片描述
    在这里插入图片描述

小结

  • apply(func[, args[, kwds]]): 阻塞方式调用函数,args表示以元组方式给函数传参,kwds表示以字典方式给函数传参
  • apply_async(func[, args[, kwds]]) :使用非阻塞方式调用函数,args表示以元组方式给函数传参,kwds表示以字典方式给函数传参
  • close():关闭Pool,使其不再接受新的任务;
  • terminate():不管任务是否完成,立即终止;
  • join():主进程阻塞,等待子进程的退出, 必须在close或terminate之后使用;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值