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

运行结果:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值