码迷,mamicode.com
首页 > 编程语言 > 详细

python基础学习日志day10-进程池

时间:2017-06-25 21:22:43      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:auth   参数   进程池   就会   程序   模块   子进程   代码   from   

一:进程池

  进程池内部维护一个进程序列,当使用时,则去进程池中获取一个进程,

  如果进程池序列中没有可供使用的进进程,那么程序就会等待,直到进程池中有可用进程为止。

 

  进程池中有两个方法:

  • apply
  • apply_async
  进程池 apply是串行;apply_async是并行
  pool必须先要close在join,进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭

 

二:代码示例

  有join代码和结果

# -*- coding:utf-8 -*-
__author__ = shisanjun
from multiprocessing import Process,Pool
import time
def Foo(i):
    time.sleep(2)
    return i+100

def Bar(arg):
    print("-->exec done",arg)

if __name__=="__main__":#main如果有main表示手动运行,执行main下面代码,如果是导入模块就不执行
    pool=Pool(5)

    for i in range(10):
        pool.apply_async(func=Foo,args=(i,),callback=Bar)
        #Foo执行完的结果会当作参数给Bar
        #callback是主进程调用,比如数据库连接,如果在子进程每次都生成连接就会占用资源,在主进程只要生成一次
    print("end")
    pool.close()
    pool.join()#进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭

"""
end
-->exec done 100
-->exec done 101
-->exec done 102
-->exec done 103
-->exec done 104
-->exec done 105
-->exec done 106
-->exec done 107
-->exec done 108
-->exec done 109
"""

 

没有join代码,主进程执行完直接退出了,所以子进行没有结果输出

  

# -*- coding:utf-8 -*-
__author__ = shisanjun
from multiprocessing import Process,Pool
import time
def Foo(i):
    time.sleep(2)
    return i+100

def Bar(arg):
    print("-->exec done",arg)

if __name__=="__main__":#main如果有main表示手动运行,执行main下面代码,如果是导入模块就不执行
    pool=Pool(5)

    for i in range(10):
        pool.apply_async(func=Foo,args=(i,),callback=Bar)
        #Foo执行完的结果会当作参数给Bar
        #callback是主进程调用,比如数据库连接,如果在子进程每次都生成连接就会占用资源,在主进程只要生成一次
    print("end")
    pool.close()
    #pool.join()#进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭

技术分享

 

python基础学习日志day10-进程池

标签:auth   参数   进程池   就会   程序   模块   子进程   代码   from   

原文地址:http://www.cnblogs.com/lixiang1013/p/7077805.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!