• python 之 进程池与线程池


    1.什么时候用池?

        池的功能是限制启动的进程数或线程数。

       什么时候应该限制?

       当并发的任务数远远超过了计算机的承受能力时,即无法一次性开启过多的进程数或线程数时

    就应该用池的概念将开启的进程数或线程数限制在计算机可承受的范围内


    2.同步 vs 异步

    同步,异步指的是提交任务的两种方式

    同步:提交完任务后就在原地等待,直到任务运行完毕后拿到任务的返回值,再继续运行下一行代码

    异步:提交完任务(绑定一个回调函数)后根本就不在原地等待,直接运行下一行代码,等到任务有返回值后会自动触发回调函数。



    进程池:

    # from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
    # import os
    # import time
    # import random
    #
    # def task(n):
    # print('%s run...' %os.getpid())
    # time.sleep(5)
    # return n**2
    #
    # def parse(future):
    # time.sleep(1)
    # res=future.result()
    # print('%s 处理了 %s' %(os.getpid(),res))
    #
    # if __name__ == '__main__':
    # pool=ProcessPoolExecutor(4)
    # # pool.submit(task,1)
    # # pool.submit(task,2)
    # # pool.submit(task,3)
    # # pool.submit(task,4)
    #
    # start=time.time()
    # for i in range(1,5):
    # future=pool.submit(task,i)
    # future.add_done_callback(parse) # parse会在futrue有返回值时立刻触发,并且将future当作参数传给parse
    # pool.shutdown(wait=True)
    # stop=time.time()
    # print('主',os.getpid(),(stop - start))




    线程池:


    from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
    from threading import current_thread
    import os
    import time
    import random

    def task(n):
    print('%s run...' %current_thread().name)
    time.sleep(5)
    return n**2

    def parse(future):
    time.sleep(1)
    res=future.result()
    print('%s 处理了 %s' %(current_thread().name,res))

    if __name__ == '__main__':
    pool=ThreadPoolExecutor(4)
    start=time.time()
    for i in range(1,5):
    future=pool.submit(task,i)
    future.add_done_callback(parse) # parse会在futrue有返回值时立刻触发,并且将future当作参数传给parse
    pool.shutdown(wait=True)
    stop=time.time()
    print('主',current_thread().name,(stop - start))











  • 相关阅读:
    无法通过给定的扩展名确定设备类型
    biuld example_osgviewerGLUT遇到的error Link2019
    OpenGL渲染流水线
    设计模式总目录
    删除thumbs.db是提示正在使用
    COM技术内幕第十章笔记EXE中的服务器
    在高低版本之间互导max文件,以fbx格式为载体尤佳。
    参数值传递的本质
    VS 为什么要检查行尾的一致性?
    vs2005中的GL文件
  • 原文地址:https://www.cnblogs.com/fxc-520520/p/9322580.html
Copyright © 2020-2023  润新知