• 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可以很方便的同时自动处理几百或者上千个并行操作,脚本的复杂性也大大降低。

  • 相关阅读:
    【MySQL案件】mysql登录-S失败
    python3使用smtplib发电子邮件
    oracle创建user具体指示
    设计模式的饕餮盛宴
    iOS使用UIScrollView实现左右滑动UITableView和UICollectionView
    MIFARE系列6《射频卡与读写器的通信》
    hdu1286 寻找新朋友 (欧拉功能)
    Python开发环境的搭建(win7)
    2014年度辛星完全解读html部分
    S2SH新手框架建立具体过程
  • 原文地址:https://www.cnblogs.com/misliu/p/9877630.html
Copyright © 2020-2023  润新知