进程池

进程池:

一个池子,里边有固定数量的进程。这些进程一直处于待命状态,一旦有任务来,马上就有进程去处理。


因为在实际业务中,任务量是有多有少的,如果任务量特别的多,不可能要开对应那么多的进程数

开启那么多进程首先就需要消耗大量的时间让操作系统来为你管理它。其次还需要消耗大量时间让cpu帮你调度它

进程池还会帮程序员去管理池中的进程

from multiprocessing import Pool
import os

p = Pool(os.cpu_count() + 1) # 查看计算机核心数, 最佳进程数为核心数+1
进程池有三个方法:
     map(func,iterable)
     func:进程池中的进程执行的任务函数
     iterable: 可迭代对象,是把可迭代对象中的每个元素依次传给任务函数当参数
    
     apply(func,args=()): 同步的效率,也就是说池中的进程一个一个的去执行任务
     func:进程池中的进程执行的任务函数
     args: 可迭代对象型的参数,是传给任务函数的参数
     同步处理任务时,不需要close和join
     同步处理任务时,进程池中的所有进程是普通进程(主进程需要等待其执行结束)
    
     apply_async(func,args=(),callback=None): 异步的效率,也就是说池中的进程一次性都去执行任务
     func:进程池中的进程执行的任务函数
     args: 可迭代对象型的参数,是传给任务函数的参数
     callback: 回调函数,就是说每当进程池中有进程处理完任务了,返回的结果可以交给回调函数,由回调函数进行进一步的处理,回调函数只有异步才有,同步是没有的
     异步处理任务时,进程池中的所有进程是守护进程(主进程代码执行完毕守护进程就结束)
     异步处理任务时,必须要加上close和join
    
     回调函数的使用:
         进程的任务函数的返回值,被当成回调函数的形参接收到,以此进行进一步的处理操作
         回调函数是由主进程调用的,而不是子进程,子进程只负责把结果传递给回调函数
原文地址:https://www.cnblogs.com/niuli1987/p/9520683.html