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

  • 相关阅读:
    VS2012 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService
    什么是 Cookie
    Memcached的简介和使用
    visual studio 2012打开提示 未能将网站×××配置为使用 ASP.NET 4.5 和 尚未在Web服务器上注册,您需要手动将Web服务器配置为使用ASP.NET 4.5
    SQLServer中char、varchar、nchar、nvarchar的区别:
    Microsoft Visual Studio 2012旗舰版(VS2012中文版下载)官方中文版
    C#操作sql通用类 SQLHelper
    用C#写入Excel表并保存
    C# TreeView 控件的综合使用方法
    ADODB.Connection、ADODB.RecordSet
  • 原文地址:https://www.cnblogs.com/lixiang1013/p/7077805.html
Copyright © 2020-2023  润新知