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

  • 相关阅读:
    用csc命令行手动编译cs文件
    笔录---果壳中的C#第一章
    Visual Studio2012快捷键总结
    JavaScript 二维数组排列组合2
    JavaScript 递归法排列组合二维数组2
    JavaScript 递归法排列组合二维数组
    JavaScript 二维数组排列组合
    在 CentOS6 上安装 GraphicsMagick-1.3.30
    Execution default-resources of goal org.apache.maven.plugins:maven-resources-plugin:2.6:resources failed: Unable to load the mojo 'resources' (or one of its required components)
    java.sql.SQLException: Column count doesn't match value count at row 1
  • 原文地址:https://www.cnblogs.com/lixiang1013/p/7077805.html
Copyright © 2020-2023  润新知