• 进程池


    ======================================

    多进程

    优点:并行多个任务,提高运行效率

               空间独立,数据安全,创建方便

    缺点:进程创建销毁的过程中销毁较多的计算机资源

    =============================================

    在需要频繁的创建和删除较多进程的情况下,导致计算机资源消耗过多,由此引发出进程池技术

    进程池如何处理;

    1、创建进程池,在池内放入适量的进程(一般看cup内核数量)

    2、将事件加入进程池等待队列

    3、使用进程池中的进程不断处理事件

    4、所有事件处理后,回收关闭进程池

    from multiprocessing import Pool

    Pool()

    功能:创建进程池

    参数:processes  指定进程池中的进程数量

    返回:得到进程池对象

    pool.apply_async()         pool这里指的是进程池对象

    功能:异步方式将事件放入进程池执行

    参数: func:要执行的事件函数

        args:同Process中args 给函数传参

        kwds:同process中Kwargs给函数传参

    返回值:返回一个对象,该对象可以通过get()方法得到func函数的返回值

    pool.close()

    功能:关闭进程池,使其无法加入新的事件

    pool.join()

    功能:阻塞等待进程池退出(当所有事件处理完毕)

    pool.apply()

    用法和apply_async一样,只不过是事件是一件一件按顺序完成。(一般不使用)

    ===========================

    pool.map(func,iter)

    ===========================

    from multiprocessing import Pool
    from time import sleep
    import os
    
    def worker(msg):
        sleep(2)
        print(msg)
    
    #创建进程池,启动4个进程
    pool=Pool(processes=4)    
    
    #放入事件
    for i in range(10):
        msg="Hello %d"%i
        pool.apply_async(worker,(msg,))
    sleep(3)
    print('='*10)
    #关闭进程池,不能加入事件
    pool.close()    
    
    #阻塞等待回收
    pool.join()
    yangrui@ubuntu:~/num6$ python3 pool.py 
    Hello 0
    Hello 3
    Hello 1
    Hello 2
    ==========
    Hello 4
    Hello 6
    Hello 7
    Hello 5
    Hello 9
    Hello 8
    yangrui@ubuntu:~/num6$ python3 pool.py 
    Hello 0
    Hello 1
    Hello 2
    Hello 3
    ==========
    Hello 5
    Hello 4
    Hello 6
    Hello 7
    Hello 8
    Hello 9
    执行结果
  • 相关阅读:
    2013年发生云盘圈地大战的原因(1是因为流量成本降价,2是因为硬盘降价,3是免费是未来的商业模式)
    硬盘可以支持140万小时(也就是159年)的MTBF(硬盘只是一次性的投入)
    百度不愧为流量之王(空间的问题只是满足了用户之间的“虚荣”,而功能的完善才最终决定了事件的走向)
    唐太宗用人 不以一恶忘其善(使用每个人的特点去做事情)
    js模块化编程
    Flux
    安装配置gerrit
    redis
    Ruby
    演进式设计
  • 原文地址:https://www.cnblogs.com/sike8/p/11131021.html
Copyright © 2020-2023  润新知