网络编程:进程创建--标准库multiprocessing模块(二--Pool)

进程池--multiprocessing模块的Pool方法

1、进程池技术

  产生原因 : 如果有大量的任务需要多进程完成,而任务周期又比较短且需要频繁创建。

         此时可能产生大量进程频繁创建销毁的情况,消耗计算机资源较大。

2、使用方法 

  【1】创建进程池,在池内放入适当数量的进程

  【2】将事件封装函数,放入到进程池

  【3】事件不断运行,知道所有放入进程池事件运行完成

  【4】关闭进程池,回收进程

from multiprocessing import Pool

3、创建进程池对象

  pool=Pool(processes)

  功能:创建进程池对象

  参数:想要存放的进程数量

  返回 : 进程池对象

4、将事件放入进程池中等待执行

  pool.apply_async(fun,args,kwargs)

  功能 : 将事件放入进程池等待执行

  参数: fun, 要执行的事件函数

        args, 以元组为fun传参

     kwargs, 以字典为fun传参

  返回值 : 返回一个事件对象, 通过get()属性函数可以获取 fun的返回值

5、将事件放入进程池中等待执行

  pool.apply(fun,args,kwargs)

  功能 : 将事件放入进程等待池执行

  参数: fun, 要执行的事件函数

     args, 以元组为fun传参

     kwargds, 以字典为fun传参

6、将要执行的事件放入到进程池中等待执行

  pool.map(func,iter)

  功能 : 将要执行的事件放入到进程池

  参数 : func ,要执行的函数

       iter, 迭代对象,给func传参

  返回值 : 返回 func的返回值列表

7、关闭进程池

  pool.close()

  功能: 关闭进程池,无法再加入事件

8、回收进程池

  pool.join()

  功能 : 回收进程池

 

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.apply(func = worker,args = (msg,))

#关闭进程池
pool.close()
#回收
pool.join()

#获取事件函数返回值
for i in result:
    print(i.get())

 

 

 

 

from multiprocessing import Pool
import time 

def fun(n):
    time.sleep(1)
    print("执行 pool map事件",n)
    return n ** 2 

pool = Pool(4)

#在进程池放入6个事件
r = pool.map(fun,range(6))
print("返回值列表:",r)

pool.close()
pool.join()

 

posted @ 2021-01-07 20:34  昱成  阅读(344)  评论(0编辑  收藏  举报