python标准函数有哪些_Python加速新境界!我用Lru_cache软件包

本文介绍了一种通过使用Python标准库functools中的lru_cache实现函数缓存的方法,显著提升ETL管道处理大量重复数据时的效率。作者通过斐波那契数列示例展示了缓存技术如何从指数增长的时间复杂度降低到线性增长,适用于数据重复度高的场景。
摘要由CSDN通过智能技术生成

全文共1291字,预计学习时长4分钟

c995d143ad4bd1138db45712ecbbc0094bfb05b4.jpeg?token=fb78ac147b5fc72df4d3fd29307dbe32来源:Pexels

加速新境界:通过使用简单的缓存功能,仅需一行代码即可加速你的函数。

不久前,我构建了一个日常运行的ETL管道,其通过从外部服务中抽取数据来丰富输入数据,然后将结果加载到数据库中。

随着输入数据的增加,等待外部服务器的响应变得非常费时,这使得ETL进程越来越慢。经过一番调查,我发现与总记录数(~500k)相比,并没有太多不同的输入值(~500)。

因此,换句话说,使用相同的参数调用外部服务时,每个参数大约要重复执行1000次。

像这样的情况是使用缓存的主要用例。缓存一个函数意味着无论何时首次计算函数的返回值,都会将其输入和结果放在字典中。

对于每个后续函数调用,首先通过查看缓存来检查结果是否已经计算过。如果在缓存中找到了,那就很完美,不需要再次计算!如果没有找到,就计算结果并将输入和结果存储在缓存中,以便下一个函数调用时查找到它。

Python标准库附带了许多鲜为人知但功能强大的软件包。对于本示例,将使用functools中的lru_cache。(LRU代表“最近最少使用(Least Recently Used)”,正如字面意思,这明确意味着缓存将保留最近的输入/结果对。)

从Fun(c)tools中导入lru_cache

把c放进括号中有点像一个蹩脚的笑话,因为这样functools就变成了fun tools(有趣的工具),使用缓存当然很有趣!

024f78f0f736afc3ff445df1040d8fc2b64512f0.jpeg?token=45d3d6622c19aa32781667236ee5dc68

这里无需过多解释。导入lru_cache并用它来装饰一个函数,该函数将生成斐波那契数。

装饰函数意味着将该函数与缓存函数包装在一起,随后每当调用fib_cache函数时,都将调用缓存的函数。

比赛开始

8326cffc1e178a828bd2ff344117178ba877e857.jpeg?token=2f000c78d4b7282ab987e4590ed68665

我们进行了一个实验,计算函数的缓存和未缓存版本从0到40计算所有斐波那契数所花费的时间,并将结果放入各自的列表中。

获胜者

83025aafa40f4bfb1cb25ad5b55b1cf6f63618e8.jpeg?token=3ddbc749fa35e94ce375cf5643c17683

对于较小的斐波那契数,二者并没有什么大的区别,但是一旦达到约30个样本,缓存函数的效率增益就开始累加。

我没有耐心让未缓存的版本运行超过40个样本,因为它的运行时间是指数增长的。而对于缓存的版本,它的运行时间只是线性增量。

95eef01f3a292df5a3d7a3d30a25386635a873fe.jpeg?token=62313e8c61e26e70ffac84af23de9039

这就完成了!距离Python缓存仅一行代码之遥。毕竟它并没那么可怕。

在初始示例中,我在Pandas数据框上使用了数据转换。值得一提的是,缓存的函数可以传递给Pandas apply,而无需进行其它的任何更改。

4ec2d5628535e5ddd488a79accd2c3e9cf1b62ed.jpeg?token=08255388085230a8a351c45534dcea12来源:Pexels

是不是很棒?你也来试试吧~

eaf81a4c510fd9f9c7fa3371ad90b72c2934a478.jpeg?token=c691c0949d80e187b76e24a21f0e6cd3

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值