
每次修复 bug 都好像会衍生出两个新的 bug,日志看起来就像加密的谜题,性能也一路下滑。我一度真的想过要从头重写所有内容。
下面介绍5个可以拯救你即将奔溃的代码的五个python库。
1. TQDM:将调试转化为进步
当一个脚本运行时间过长时,你的大脑就会开始怀疑它到底有没有用。我就是这样,盯着一个卡住的终端好几个小时。然后我发现tqdm……
这个小工具不仅能提供进度条,还能让你保持理智。用它来循环就像在黑暗的房间里按电灯开关一样。
from tqdm import tqdmimport timefor _ in tqdm(range(100)): time.sleep(0.05) # 模拟缓慢工作
我不用再猜测代码是否“卡住了”,而是可以清楚地看到它到底在哪里。这听起来可能有点小题大做,但相信我,这样的清晰思路可以让你继续写代码,而不是愤怒地放弃。
2. Joblib:轻松并行
我曾经为了“加快速度”,把同一个循环复制粘贴到多个脚本里。剧透一下:这根本没用。Python 真正的并行性吓到我了,线程、进程、GIL,所有这些术语。
然后我偶然发现了joblib。突然间,并行处理只差一行代码了。
from joblib import Parallel, delayeddefsquare(n):return n * nresults = Parallel(n_jobs=4)(delayed(square)(i) for i in range(10))print(results)
无需复杂的设置,无需重新设计多处理机制。只需更快、更高效地执行即可。这感觉像是在作弊,但却是最好的方式。
3. Pathlib:清理我的文件混乱
我的旧脚本简直就是"./folder//subfolder\\file.txt"噩梦。到处都是字符串,有一半都坏了,具体情况取决于操作系统。
然后我pathlib像清洁工一样进来了。我没有使用字符串 hack,而是开始将路径视为一等对象。
from pathlib import Pathfolder = Path("data") / "inputs"for file in folder.glob("*.txt"): print(file.name)
可读性强,可靠性高,而且不再有“斜杠和反斜杠”的麻烦。我一度怀疑自己为什么没早点学这个。
4. Cachetools:杜绝重复错误
我项目中的一个函数总是反复发出相同的 API 请求,像汽油一样消耗着请求速率限制。解决办法是什么?缓存。
输入cachetools,一个允许你仅使用装饰器来缓存函数调用的库。
from cachetools import cached, TTLCacheimport requestscache = TTLCache(maxsize=100, ttl=300)@cached(cache)defget_data(url):return requests.get(url).json()
现在,如果函数被调用时传入相同的参数,它只会返回缓存的结果,而不会对服务器进行任何攻击。我的代码不再向 API 发送垃圾信息,我也不再担心被封禁了。
5. Hydra:当配置失控时
以前,我的项目有三个配置文件,几十个硬编码常量,一半的 bug 都源于我忘记了在哪里定义了某些东西。Hydra 改变了这一切。
Hydra 让你可以像专业人士一样管理配置,并且其覆盖方式不像胶带那样。
import hydrafrom omegaconf import DictConfig@hydra.main(version_base=None, config_path=".", config_name="config")defmain(cfg: DictConfig): print(cfg.database.url)if __name__ == "__main__": main()
突然之间,我不再需要在十个文件中寻找值了。一切都模块化了,简洁明了,而且易于覆盖。感觉就像从凌乱的宿舍搬到了一个真正有存储空间的地方。
写作最后
这些库不仅修复了 bug,还改变了我对项目的思考方式。每一个库都为我实现自动化和扩展的方式带来了细微却强大的提升。
不要等到你的代码库变得非常糟糕才去学习这些工具。尽早将它们融入你的工作流程,它们能帮你免去日后的烦恼。
内容转自数据STUDIO,侵删
仅目前来说,无论是运维人转型提升,还是零基础想转行IT,最好的岗位就是云计算运维&SRE岗位。
为了帮助大家早日快速入门云计算运维领域,给大家整理了一套【最新运维资料】高级运维工程师必备技能资料包(文末一键免费领取),内容有多详实丰富看下图!