6、sys 模块介绍(含查看系统内存占用)

本文介绍了如何在Python中获取命令行参数,使用sys.getsizeof检查变量和元组内存占用,以及使用memory_profiler模块分析代码内存使用情况。还展示了如何通过psutil获取系统内存信息和Python脚本内存消耗的清理过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击上方分类专栏、进行系统性学习(文末可扫码领取资料)

1、获取命令行参数

  • 通过sys.argv获取命令行传入的参数
  • test.py内容如下:
import sys

print(sys.argv)
  • 执行python test.py haha 112 2 3(多个参数之间空格隔开),输出结果如下:
['test.py', 'haha', '112', '2', '3']

2、查看内存占用情况

(1)查看变量占用的内存

  • sys.getsizeof(param):查看 python 运行当前范围内的变量、方法和定义的类型会占用多少memory,返回占用的字节(bytes)数。
  • 注意,该方法无法判断一个类占用的内存。
import sys


print("【01】字符串不同长度所占内存的对比 ======================")
str_0 = ""
print(sys.getsizeof(str_1))  #jy: 49
str_1 = "1"
print(sys.getsizeof(str_1))  #jy: 50
str_2 = "a"
print(sys.getsizeof(str_2))  #jy: 50
str_3 = "12"
print(sys.getsizeof(str_3))  #jy: 51
str_4 = "12345"
print(sys.getsizeof(str_4))  #jy: 54


print("【02】元组占用内存对比 =================================")
tp_0 = ()
print(sys.getsizeof(tp_0))   #jy: 40
tp_1 = (1)
print(sys.getsizeof(tp_1))   #jy: 28
tp_1 = (1,)
print(sys.getsizeof(tp_1))   #jy: 48
tp_2 = (1, 2)
print(sys.getsizeof(tp_2))   #jy: 56
tp_3 = ("a")
print(sys.getsizeof(tp_3))   #jy: 50
tp_4 = ("a", "b")
print(sys.getsizeof(tp_4))   #jy: 56

(2)查看py脚本占用的内存:memory_profiler

  • memory_profiler模块用来基于逐行测量代码的内存使用。该模块会让代码运行的更慢。
    • pip install memory_profiler[==0.61.0]
  • 建议安装psutil包,会使memory_profile会运行的快一点
    • pip install psutil[==5.8.0]
import numpy as np
import os
import psutil
import gc
from memory_profiler import profile


# jy: 使用 @profile 装饰器来标识需要追踪的函数
@profile
def test():
    a=np.full(shape=(600, 700), fill_value=99.0)
    return a
 
if __name__ == '__main__':
 
    a=test()

    # jy: 查看清理变量前的内存消耗情况;
    print('A:%.2f MB' % (psutil.Process(os.getpid()).memory_info().rss / 1024 / 1024))
    # jy: 清理变量, 并进行垃圾回收
    del a
    gc.collect()
    # jy: 查看清理变量后的内存消耗情况;
    print('B:%.2f MB' % (psutil.Process(os.getpid()).memory_info().rss / 1024 / 1024))

    
# jy: 输出结果如:
"""
Filename: /root/test.py

Line #    Mem usage    Increment  Occurrences   Line Contents
=============================================================
     9     61.1 MiB     61.1 MiB           1   @profile
    10                                         def test():
    11     64.1 MiB      3.1 MiB           1       a=np.full(shape=(600, 700), fill_value=99.0)
    12     64.1 MiB      0.0 MiB           1       return a


A:64.15 MB
B:61.14 MB
"""

(3)查看系统内存信息:psutil

import psutil
import os


info = psutil.virtual_memory()
print('内存使用:', psutil.Process(os.getpid()).memory_info().rss)
print('总内存:', info.total)
print('内存占比:', info.percent)
print('cpu个数:', psutil.cpu_count())

"""
内存使用: 10137600
总内存: 8101330944
内存占比: 41.1
cpu个数: 4
"""

融码一生:专注 Python、Linux、C/C++、机器学习 & 深度学习 & NLP 领域创作

下方扫码关注公众号,获取完整 PDF / 线上电子书

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

融码一生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值