zoukankan      html  css  js  c++  java
  • python语法基础-并发编程-线程-线程池

    ###############   线程池    ##############

    """
    池 —— concurrent.futures
    Python标准模块--concurrent.futures
    
    concurrent.futures模块提供了高度封装的异步调用接口,其中:
    ThreadPoolExecutor:线程池
    ProcessPoolExecutor: 进程池
    
    借助上面两个类,我们可以很方便地创建进程池对象和线程池对象。
    p_pool = ProcessPoolExecutor(max_workers=5)  # 创建一个最多5个woker的进程池
    t_pool = ThreadPoolExecutor(max_workers=5)  # 创建一个最多5个woker的线程池
    
    可用方法介绍:
    # 基本方法
    # submit(fn, *args, **kwargs)  提交任务
    # map(func, *iterables, timeout=None, chunksize=1)  取代for循环submit的操作
    # shutdown(wait=True) 相当于进程池的pool.close()+pool.join()操作 wait=True,等待池内所有任务执行完毕回收完资源后才继续 wait=False,立即返回,并不会等待池内的任务执行完毕 但不管wait参数为何值,整个程序都会等到所有任务执行完毕 submit和map必须在shutdown之前
    # result(timeout=None) 取得结果 # add_done_callback(fn) 回调函数
    """

    线程池的使用:

    from concurrent.futures import ThreadPoolExecutor
    import time
    def func(n):
        time.sleep(2)
        print(n)
        return n*n
    
    
    tpool = ThreadPoolExecutor(max_workers=5)
    # 进程池,启动cpu核数+1.
    # 而线程池的启动是cpu核数 * 5 不要超过这个,
    
    t_list = []
    for i in range(20):
        t = tpool.submit(func,i)  # 提交一个任务,传递一个参数,
        t_list.append(t)
    
    tpool.shutdown()
    # shutdown做了两个事情:
    # 1,colse 关闭这个池子,不让有任务进来,
    # 2,join是阻塞,直到这个池子的任务执行完,
    # 所以是一个shutdown做了两个事情,
    print("主进程")
    for t in t_list:print(t.result())
  • 相关阅读:
    建设Kubernetes生产环境的16条建议
    深度长文:深入理解Ceph存储架构
    10个最危险的Linux命令,希望你牢记在心
    完美排查入侵者的 10 个方法和 1 个解决思路
    基于Docker&Kubernetes构建PaaS平台基础知识梳理
    Linux入门进阶
    (七)服务接口调用-OpenFeign
    (六)服务调用负载均衡-Ribbon
    (五)Eureka替换方案-Consul
    (四)Eureka替换方案-Zookeeper
  • 原文地址:https://www.cnblogs.com/andy0816/p/12381476.html
Copyright © 2011-2022 走看看