• 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))











  • 相关阅读:
    Go开发环境搭建
    es入门小结
    Python操作ES
    mongodb
    RBAC-基于角色的访问控制 django缓存、信号、xadmin使用
    drf序列化群增、群改、群删
    drf过滤、分页、全局异常处理
    VS配置IISExpress外部IP访问
    Oracle中tnsping命令解析
    oracle导入Excel数据文件(大量数据)处理方法
  • 原文地址:https://www.cnblogs.com/fxc-520520/p/9322580.html
Copyright © 2020-2023  润新知