zoukankan      html  css  js  c++  java
  • python限制进程、子进程占用内存大小、CPU时间的方法:resource模块

    内置模块:resource

    在mac环境下功能会存在问题。linux下可以使用:但是for i in range(10000)的值必须是10000或者更大的数值才有用。没有搞清楚为什么

    #/usr/bin/env python
    #-*-coding:utf-8-*-
    import resource
    #soft,hard=resource.getrlimit(resource.RLIMIT_STACK)
    #resource.setrlimit(resource.RLIMIT_STACK,(4,hard))
    #soft,hard=resource.getrlimit(resource.RLIMIT_DATA)
    #resource.setrlimit(resource.RLIMIT_DATA,(0.002,hard))
    soft,hard=resource.getrlimit(resource.RLIMIT_AS)
    resource.setrlimit(resource.RLIMIT_AS,(1,hard))   # 理解上,值1表示1字节,程序随便赋个值,内存就会不够用,其实不是这么回事,需要下面循环10000次才有效果
    aia=2222222
    b='sdfdf似懂非懂辅导辅导'
    for i in range(10000):
        a='str'
        a=a+str(i)
        print a
        a=b
        print a

    效果:MemoryError

    要限制内存使用,设置可使用的总内存值即可,如下:

    import resource
    
    def limit_memory(maxsize):
        soft, hard = resource.getrlimit(resource.RLIMIT_AS)
        resource.setrlimit(resource.RLIMIT_AS, (maxsize, hard))
    

    像这样设置了内存限制后,程序运行到没有多余内存时会抛出 MemoryError 异常。

    讨论

    在本节例子中,setrlimit() 函数被用来设置特定资源上面的软限制和硬限制。 软限制是一个值,当超过这个值的时候操作系统通常会发送一个信号来限制或通知该进程。 硬限制是用来指定软限制能设定的最大值。通常来讲,这个由系统管理员通过设置系统级参数来决定。 尽管硬限制可以改小一点,但是最好不要使用用户进程去修改。

    setrlimit() 函数还能被用来设置子进程数量、打开文件数以及类似系统资源的限制。 更多详情请参考 resource 模块的文档。

    需要注意的是本节内容只能适用于Unix系统,并且不保证所有系统都能如期工作。 比如我们在测试的时候,它能在Linux上面正常运行,但是在OS X上却不能。

    主要函数:

    • resource.getrlimit(resource) 获取资源的大小限制
    • resource.setrlimit(resourcelimits) 设置资源的大小限制,limits必须是格式(soft,hard),soft/hard都必须为整数
    • resource.prlimit(pidresource[, limits])
    • resource.getrusage(who) 获取进程或者线程占用的资源情况
    • resource.getpagesize()

    resource值可以为:resource.RLIMIT_COREresource.RLIM_INFINITYresource.RLIMIT_CPUresource.RLIMIT_FSIZE……

    who的值可以为:resource.RUSAGE_SELF进程自身、resource.RUSAGE_CHILDREN子进程resource.RUSAGE_BOTHresource.RUSAGE_THREAD当前线程

    Python 内存管理的另一个有趣话题是它的“垃圾回收”机制。它以“引用计数” 为主,并借助“标记-清除”机制消除循环引用带来的影响。为了加速对象的创建,Python 又引入 “分代回收”机制,它缓存部分反复创建和销除的对象,而非在它们释放后直接从内存删除它们, 从而加速下次该对象的创建

    https://docs.python.org/3.4/library/resource.html

    https://python3-cookbook.readthedocs.io/zh_CN/latest/c13/p14_putting_limits_on_memory_and_cpu_usage.html 对应中文:https://www.rddoc.com/doc/Python/3.6.0/zh/library/resource/ 翻译的一般

    https://blog.csdn.net/liangyuannao/article/details/9697987 这个例子可以在linux下看出效果

  • 相关阅读:
    Mysql问题1862
    S3TC IAP15F2K61S2点亮一个发光二极管keil和stc-isp软件操作
    .NET练习计算平方根
    求一个整数以内的素数(函数实现)
    判断一个数是不是素数(函数实现)
    #号在进制输出值的作用,美化输出
    分类——决策树模型(附有决策树生成步骤)
    分类:贝叶斯分类之新闻组数据组学习(查看数据类型的方法)(环境:Pycharm)
    分类:K-近邻分类之鸢尾花数据集学习(包含数据预处理中的标准化)(环境:Pycharm)
    编写一个程序,求2~n间的素数,n由键盘输入,循环变量分别 从2到n、2到(int)sqrt(n),分别测出两个循环的所用时间。
  • 原文地址:https://www.cnblogs.com/shengulong/p/10140127.html
Copyright © 2011-2022 走看看