进程池

产生原因:
  如果有大量的任务需要多进程完成,则可以需要频繁的创建删除进程,给计算机带来了较多的资源消耗

处理原理:
  创建适当的进程放入进程池,用来处理待处理事件,处理完毕后进程不销毁,仍然在进程池中等待处理其他事件。进程的复用降低了资源的消耗。

使用方法:
  1.创建进程池,在池内放入适当的进程
  2.将事件加入到进程池,等待队列
  3.不断取进程执行事件,知道所有事件执行完毕
  4.关闭进程池,回收进程

函数方法:

Pool(processes)
  功能:创建进程池对象
  参数:进程数量
  返回 : 进程池对象

pool.apply_async(func, args, kwds) 异步
  功能:将事件放入到进程池队列
  参数:func 事件函数
  args 以元组形式给func传参
  kwds 以字典形式给func传参
  返回值:返回一个代表进程池事件的对象

pool.apply(func, args, kwds) 同步
  功能:将事件放入到进程池队列
  参数:func 事件函数
  args 以元组形式给func传参
  kwds 以字典形式给func传参  

pool.close()
  功能:关闭进程池

pool.join()
  功能:回收进程池     注意:具有阻塞功能,等待子进程运行结束

pool.map(func, iter)
  功能:将要做的事件放入进程池
  参数:func 要执行的函数
  iter 迭代对象
  返回值:返回事件函数的返回值列表 

实例代码:
from multiprocessing import Pool
from time import sleep,ctime

def worker(msg):
    sleep(2)
    print(msg)
    return ctime()

#创建进程池
pool = Pool(processes = 4)

result = []
for i in range(10):
    msg = "hello %d" % i
    #将事件放入进程池队列,等待执行
    r = pool.apply_async(func = worker, args = (msg,))
    result.append(r)

#光闭进程池
pool.close()

#回收
pool.join()
for i in result:
    print(i.get())   #获取对象的还回值

 

原文地址:https://www.cnblogs.com/zengsf/p/9637853.html