进程池和线程池

创建池的目的

节省资源,防止内存占满的情况,最主要的是提高效率
"""
什么是池?
	池是用来保证计算机硬件安全的情况下最大限度的利用计算机
	它降低了程序的运行效率但是保证了计算机硬件的安全 从而让你写的程序能够正常运行
池子的使用非常的简单
你只需要将需要做的任务往池子中提交即可 自动会有人来服务你

"""

创建进程池

#导入模块
from concurrent.futures import  ProcessPoolExecutor

p_pool =  ProcessPoolExecutor(5) #创建一个进程池,里面放5个进程

p_pool.submit(函数,参数).add_done_callback(回调函数名)

例子

from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
def res(a,b):
    return a+b
#回调函数
def callback(data):
    #函数res的返回值就是data,但是直接打印data是内存地址,需要配合result
    print(data.result())

if __name__ == '__main__':
    #创建一个有五个进程的进程池
    p_pool = ProcessPoolExecutor(5)
                                    #回调函数
    p_pool.submit(res,1,2).add_done_callback(callback)
任务的提交方式
    同步:提交任务之后原地等待任务的返回结果 期间不做任何事
    异步:提交任务之后不等待任务的返回结果 执行继续往下执行
        返回结果如何获取???
        异步提交任务的返回结果 应该通过回调机制来获取
        回调机制
            就相当于给每个异步任务绑定了一个定时炸弹
            一旦该任务有结果立刻触发爆炸

检验切换是否提高效率

# import time
#
# # 串行执行计算密集型的任务   1.2372429370880127
# def func1():
#     for i in range(10000000):
#         i + 1
#
# def func2():
#     for i in range(10000000):
#         i + 1
#
# start_time = time.time()
# func1()
# func2()
# print(time.time() - start_time)

# 切换 + yield  2.1247239112854004
# import time
#
#
# def func1():
#     while True:
#         10000000 + 1
#         yield
#
#
# def func2():
#     g = func1()  # 先初始化出生成器
#     for i in range(10000000):
#         i + 1
#         next(g)
#
# start_time = time.time()
# func2()
# print(time.time() - start_time)
posted @ 2023-03-31 16:58  xiaolisolove  阅读(29)  评论(0)    收藏  举报