『读芯术』Python加速新境界!我用Lru_cache软件包
全文共1291字 , 预计学习时长4分钟
本文插图
来源:Pexels
加速新境界:通过使用简单的缓存功能 , 仅需一行代码即可加速你的函数 。
不久前 , 我构建了一个日常运行的ETL管道 , 其通过从外部服务中抽取数据来丰富输入数据 , 然后将结果加载到数据库中 。
随着输入数据的增加 , 等待外部服务器的响应变得非常费时 , 这使得ETL进程越来越慢 。 经过一番调查 , 我发现与总记录数(~500k)相比 , 并没有太多不同的输入值(~500) 。
因此 , 换句话说 , 使用相同的参数调用外部服务时 , 每个参数大约要重复执行1000次 。
像这样的情况是使用缓存的主要用例 。 缓存一个函数意味着无论何时首次计算函数的返回值 , 都会将其输入和结果放在字典中 。
对于每个后续函数调用 , 首先通过查看缓存来检查结果是否已经计算过 。 如果在缓存中找到了 , 那就很完美 , 不需要再次计算!如果没有找到 , 就计算结果并将输入和结果存储在缓存中 , 以便下一个函数调用时查找到它 。
Python标准库附带了许多鲜为人知但功能强大的软件包 。 对于本示例 , 将使用functools中的lru_cache 。 (LRU代表“最近最少使用(Least Recently Used)” , 正如字面意思 , 这明确意味着缓存将保留最近的输入/结果对 。 )
从Fun(c)tools中导入lru_cache
把c放进括号中有点像一个蹩脚的笑话 , 因为这样functools就变成了fun tools(有趣的工具) , 使用缓存当然很有趣!
【『读芯术』Python加速新境界!我用Lru_cache软件包】
本文插图
这里无需过多解释 。 导入lru_cache并用它来装饰一个函数 , 该函数将生成斐波那契数 。
装饰函数意味着将该函数与缓存函数包装在一起 , 随后每当调用fib_cache函数时 , 都将调用缓存的函数 。
比赛开始
本文插图
我们进行了一个实验 , 计算函数的缓存和未缓存版本从0到40计算所有斐波那契数所花费的时间 , 并将结果放入各自的列表中 。
获胜者
本文插图
对于较小的斐波那契数 , 二者并没有什么大的区别 , 但是一旦达到约30个样本 , 缓存函数的效率增益就开始累加 。
我没有耐心让未缓存的版本运行超过40个样本 , 因为它的运行时间是指数增长的 。 而对于缓存的版本 , 它的运行时间只是线性增量 。
本文插图
这就完成了!距离Python缓存仅一行代码之遥 。 毕竟它并没那么可怕 。
在初始示例中 , 我在Pandas数据框上使用了数据转换 。 值得一提的是 , 缓存的函数可以传递给Pandas apply , 而无需进行其它的任何更改 。
本文插图
来源:Pexels
是不是很棒?你也来试试吧~
本文插图
留言点赞关注
我们一起分享AI学习与发展的干货
如转载 , 请后台留言 , 遵守转载规范
推荐阅读
- 「车家号」广汽本田云发布两款重磅车型,战略格局加速调整
- 腾讯SaaS加速器学员实战经验:用生态系统的思维探索商业模式创新
- #PCEVA#赋予独显更多开火权!NVIDIA推出动态加速和高级显示切换技术
- 「广州日报」将带给广州什么?,“数字经济22条”与“广州试验区”加速建设
- 【砍柴网】华云数据亮相第四届智慧医疗创新大赛湖南赛区 分享借云助力智慧医疗加速变革
- #一体化#“示范区金融16条”出炉 长三角一体化加速推进
- 科技小数据■Python培训完能够做数据分析类的工作吗?
- [云计算]打造工业互联网 助力企业加速“上云”
- 产业气象站■助力加速平台交易增长,云集赋能新兴品牌
- 忧家娱乐▲荣耀20泪流满面加速降价!,麒麟820+四摄荣耀30S正式发布
