# 显示当前 python 程序占用的内存大小
import os
import psutil as psutil
def show_memory_info(hint):
# 获取当前进程的进程号
pid = os.getpid()
# psutil 是一个获取系统信息的库
p = psutil.Process(pid)
info = p.memory_full_info()
memory = info.uss/1024./1024
print(f"{hint} memory used: {memory} MB ")
def test_iterator():
# 针对迭代器的占用测试
# 对于迭代器 每个元素在生成之后就会保存在内存中
# 即使占用了巨量的内存
# 内存不够就会出现 OOM 错误
show_memory_info("initing iterator")
list_1 = [i for i in range(1000000)]
show_memory_info("after iterator")
# 不过我们并不需要在内存中同时保存这么多的东西
# 例如对元素进行求和 我们只需要知道每个元素在相加的那一刻是多少就行了 用完就可以扔掉了
print(sum(list_1))
show_memory_info("after sum ")
def test_generator():
# 针对生成器的占用测试
show_memory_info("initing generator")
# 生成器的概念应运而生 在你调用 next 的时候 才会生成下一个变量
# 生成器在初始化的时候 并不需要运行一次生成操作
list_1 = (i for i in range(1000000))
show_memory_info("after generator")
print(sum(list_1))
show_memory_info("after sum ")
test_iterator()
print()
test_generator()
运行结果: