zoukankan      html  css  js  c++  java
  • Python进程池

    在python中启动进程是非常耗资源的,有了进程池就可以限制同一时刻运行的进程数,避免程序崩溃。

    Pool可以提供指定数量的进程供用户调用,当有新的请求提交到pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到规定最大值,那么该请求就会等待,直到池中有进程结束,才会创建新的进程来它。

    进程池使用如下:

    from  multiprocessing import Process, Pool,freeze_support
    import time
    import os
    
    def Foo(i):
        time.sleep(2)
        print("in process",os.getpid())
        return i + 100
    
    def Bar(arg):
        print('-->exec done:', arg,os.getpid())
    
    if __name__ == '__main__':
        #freeze_support()
        pool = Pool(processes=3) #允许进程池同时放入3个进程
        print("主进程",os.getpid())
        for i in range(10):
            pool.apply_async(func=Foo, args=(i,), callback=Bar) #callback=回调  进程执行完毕后由父进程调用
            #pool.apply(func=Foo, args=(i,)) #串行
            #pool.apply_async(func=Foo, args=(i,)) #并行
        print('end')
        pool.close()
        pool.join() #进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭。.join()
    

      运行结果:

    主进程 12376
    end
    in process 8664
    -->exec done: 100 12376
    in process 13008
    -->exec done: 101 12376
    in process 11812
    -->exec done: 102 12376
    in process 8664
    -->exec done: 103 12376
    in process 13008
    -->exec done: 104 12376
    in process 11812
    -->exec done: 105 12376
    in process 8664
    -->exec done: 106 12376
    in process 13008
    -->exec done: 107 12376
    in process 11812
    -->exec done: 108 12376
    in process 8664
    -->exec done: 109 12376

    利用multiprocessing下的Pool可以很方便的同时自动处理几百或者上千个并行操作,脚本的复杂性也大大降低。

  • 相关阅读:
    pytroch resnet构建过程理解
    python 参数前星号(*)的用法
    Win10 + Visual Studio 2017 下 OpenCV无法显示图像的问题
    模板类中的友元函数
    caltech行人检测数据集上的论文
    (转)使用K-S检验一个数列是否服从正态分布、两个数列是否服从相同的分布
    matplotlib较好的博客
    Python 获取时间戳
    (转载)keras使用入门及3D卷积神经网络资源
    linux 下的字典安装
  • 原文地址:https://www.cnblogs.com/misliu/p/9877630.html
Copyright © 2011-2022 走看看