进程池和线程池
创建池的目的
节省资源,防止内存占满的情况,最主要的是提高效率
"""
什么是池?
池是用来保证计算机硬件安全的情况下最大限度的利用计算机
它降低了程序的运行效率但是保证了计算机硬件的安全 从而让你写的程序能够正常运行
池子的使用非常的简单
你只需要将需要做的任务往池子中提交即可 自动会有人来服务你
"""
创建进程池
#导入模块
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)
本文作者:xiaolisolove
本文链接:https://www.cnblogs.com/zxjwt/p/17276821.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用