线程池和进程池

Posted asdaa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程池和进程池相关的知识,希望对你有一定的参考价值。

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

 

以上是关于线程池和进程池的主要内容,如果未能解决你的问题,请参考以下文章

开启线程池和进程池

Python进程池和线程池

python中的进程池和线程池

2020Python修炼记python并发编程补充—进程池和线程池

线程池和进程池

进程池和线程的初步