zoukankan      html  css  js  c++  java
  • 线程池和进程池

    from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
    import os
    import time
    
    '''
    进程池与线程池
    
    开进程开线程都需要消耗资源,只不过两者比较的情况线程消耗的资源比较少
    
    在计算机能够承受范围之内最大限度的利用计算机
    
    
    什么是池?
        在保证计算机硬件安全的情况下最大限度的利用计算机
        池其实是降低了程序的运行效率 但是保证了计算机硬件的安全
        (硬件的发展跟不上软件的速度)
    '''
    
    # pool = ThreadPoolExecutor()  # 括号内可以传参数指定线程池内的线程个数
    # 也可以不穿默认的是计算机cpu个数乘以5
    
    pool = ProcessPoolExecutor()  # 不传,默认参数为cpu个数
    '''
    池子中创建的进程或者线程创建一次就不会再创建了
    至始至终用的都是最初的几个
    这样的话节省了反复开辟进程或者线程的资源
    '''
    
    
    def task(n):
        print(n,    os.getpid())
        time.sleep(2)
        return n**2, n
    
    
    def call_back(x):
        print(x)
        print('拿到了异步提交任务的返回结果:', x.result())
    
    
    # if __name__ == '__main__':
    #     pool.submit(task, 2)  # 朝线程池/进程池提交任务,异步提交
    #     print('zhu')
    '''
    异步提交任务之后,不等任务的返回结果(异步的结果怎么拿???),直接执行下一行代码
    异步回调机制:当异步提交的任务有返回结果之后,会自动触发回调函数的执行
    '''
    
    if __name__ == '__main__':
        t_list = []
        for i in range(40):
            # res = pool.submit(task, i)
            res = pool.submit(task, i).add_done_callback(call_back)  # 提交任务的时候 绑定一个回调函数 一旦该任务有结果  立刻执行绑定的回调函数
            # print(res.result())  # 原地等待任务的返回结果,把并行变成串行
            # t_list.append(res)
    
        # pool.shutdown()  # 关闭池子 等待池子中所有的任务执行完毕之后 才会执行下面的代码
        # for p in t_list:
        #     print('>>>:', p.result())
  • 相关阅读:
    linux系统中给数据加上列号
    linux系统中统计指定类型文件大小的总和
    linux系统中awk命令求一列值的最大值、最小值、和及平均值
    R语言中找交集、并集、找不同、判断是否相同
    如何在字符串中加入回车换行,tab字符(关于字符串处理)
    BAPI几个有用的BAPI调用样例
    SAP 中国的咨询合作伙伴
    关于MRP的几个概念
    为什么有人不喜欢标准成本
    ERP系统中的存货计价过程
  • 原文地址:https://www.cnblogs.com/asdaa/p/11372818.html
Copyright © 2011-2022 走看看