python 进程池--->pool

1.什么是进程池:

进程池内部维护一个进程序列,当使用时,则去进程池中获取一个进程,如果进程池序列中没有可供使用的进进程,那么程序就会等待,直到进程池中有可用进程为止。

2.参数介绍:

Pool(numprocess,initializer,initargs) 创建进程池

numprocess:要创建的进程数,如果省略,将默认使用cpu_count()的值
initializer:是每个工作进程启动时要执行的可调用对象,默认为None
initargs:是要传给initializer的参数组


3.代码示例:
from multiprocessing import Pool  #导入pool模块
import os,time

def work(n):
    print('task <%s> is runing' %os.getpid())
    time.sleep(2)
    return n**2
if __name__ == '__main__':
    print(os.cpu_count())  #这条命令用来获取cpu的个数
    p=Pool(4)  #指定最大的进程 不写默认为cpu的个数。
    # for i in range(10):
    #     res=p.apply(work,args=(i,))  #apply 同步执行。一个一个执行,效率偏低 (了解)
        # print(res) 获取的结果是 work的返回值。也就是return后面的结果。

    res_l=[]
    for i in range(10):
        res=p.apply_async(work,args=(i,)) #异步的提交任务,只负责往队列中加任务。这样会生成一些对象。
        res_l.append(res)   #将产生的对象方法放到一个列表中
    #
    p.close()  #不允许在向进程池中提交任务。
    p.join() #等待p结束完成在执行主程序中的取值方法。
    for res in res_l:
        print(res.get())  #使用get方法从进程池中取值。

 



posted @ 2017-08-30 14:52  嘟囔囔小孩  阅读(412)  评论(0编辑  收藏  举报