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











  • 相关阅读:
    算法---十大经典排序算法
    算法---待整理
    iOS面试题整理---[难度]***
    spring mvc(注解)上传文件的简单例子
    面试感悟:3年工作经验程序员应有的技能
    一个 IT 青年北漂四年的感悟
    成为更优秀程序员的关键:更多的阅读
    数组参数 有params 区别
    对C# 集合类的总结
    c#前缀
  • 原文地址:https://www.cnblogs.com/fxc-520520/p/9322580.html
Copyright © 2020-2023  润新知