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

  • 相关阅读:
    1.23学习总结:文件流
    vue-router重写push方法,解决相同路径跳转报错,解决点击菜单栏打开外部链接
    手把手教Electron+vue,打包vue项目,打包成桌面程序。
    后台获取的map集合封装json
    VUE同级组件之前方法调用
    字节跳动今日头条-抖音小程序序html富文本显示解决办法
    别总写代码,这130个网站比涨工资都重要
    vue 组件之间的自定义方法互相调用
    swiper轮播图出现疯狂抖动(小程序)
    vue通过地址下载文件
  • 原文地址:https://www.cnblogs.com/lixiang1013/p/7077805.html
Copyright © 2011-2022 走看看