• 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())
  • 相关阅读:
    java并发
    jvm虚拟机
    L2Dwidget二次元前端添加人物插件
    MySQL数据库之rowid
    MySql支持emoji表情设置
    zookeeper不能正常启动问题(转)
    jd-gui-windows-1.6.6.zip反编译工具
    为什么es集群至少需要三个节点(转)
    超好用的uniapp弹出层
    netcore5.0 使用新的Microsoft.Data.SqlClient
  • 原文地址:https://www.cnblogs.com/andy0816/p/12381476.html
Copyright © 2020-2023  润新知