优化你的 Python 内存使用
我尝试读取一个 2GB 的日志文件。我使用了列表推导式。结果我的笔记本电脑崩溃了,因为它内存耗尽了。
我吸取了一个教训。列表推导式是“急切”的(eager),它们会一次性加载所有内容。生成器表达式是“惰性”的(lazy),它们会逐个加载项目。
使用海象运算符 (:=)。它可以为你存储一个值,让你在同一行代码中重复使用该值。这可以节省 CPU 时间。不要再重复调用那些开销巨大的函数了。
对于 sum、max 或 min 等函数,不要再用 list() 把生成器包装起来了。这样做是浪费。生成器能保持较低的内存占用。
请注意,生成器是单次使用的。遍历一次后它们就会变空。如果你需要再次使用这些数据,请创建一个新的生成器或将其转换为列表。
为实际的高负载场景编写代码:
- 对大数据流使用生成器。
- 使用海象运算符来减轻 CPU 负担。
- 记住生成器是一次性的。
今天就检查一下你的代码吧。尝试将列表替换为生成器。