zoukankan      html  css  js  c++  java
  • python网络编程--进程池

    一:进程池

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

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

      进程池中有两个方法:

    • 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()#进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭

  • 相关阅读:
    移动端前端布局的必看前提
    单词统计
    用户场景分析
    学习进度(九)
    团队项目
    学习进度(二)
    数据可视化
    大二下,学习进度(一)
    求最大子数组的和
    构建之法3
  • 原文地址:https://www.cnblogs.com/lixiang1013/p/7077805.html
Copyright © 2011-2022 走看看