通过显示当前 python 程序占用的内存大小来比较生成器和迭代器(转载)

# 显示当前 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()

运行结果:

在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页