python限制进程、子进程占用内存大小、CPU时间的方法:resource模块

摘要:
讨论在本节的示例中,setrlimit()函数用于设置特定资源的软限制和硬限制。硬限制用于指定可设置软限制的最大值。setrlimit()函数还可以用于设置子进程、打开文件和类似系统资源的数量限制。有关详细信息,请参阅资源模块文档。谁能成为的价值:资源。RUSAGE_SELF进程本身,资源。RUSAGE_CHILDREN子流程,资源。RUSAGE_BOTH,资源。RUSAGE_thread当前线程Python内存管理的另一个有趣话题是它的“垃圾收集”机制。

内置模块: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

python限制进程、子进程占用内存大小、CPU时间的方法:resource模块第1张

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

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下看出效果

免责声明:文章转载自《python限制进程、子进程占用内存大小、CPU时间的方法:resource模块》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇端口重用[Oracle]Oracle镜像安装及使用教程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【python系统学习10】布尔值

python的数据类型有好多个,前边写过字符串、整数和浮点数这三种。 本节来整理另一种简单数据类型--布尔值 布尔值(bool) 布尔值和其数据值 计算机可以用数据进行判断,若判断为真则执行特定条件中的代码块。若不为真则执行相反的指定条件内的代码块或不执行任何内容。 这种数据就是布尔值。其数据类型在python中标记为bool。 布尔值其值比较特殊,不像字...

Java并发知识总结,超详细!

首先给大家分享一个github仓库,上面放了200多本经典的计算机书籍,包括C语言、C++、Java、Python、前端、数据库、操作系统、计算机网络、数据结构和算法、机器学习、编程人生等,可以star一下,下次找书直接在上面搜索,仓库持续更新中~ github地址:https://github.com/Tyson0314/java-books 如果gi...

C++程序员学Python:C与Python进行交互

1.C调用python 其实C与python的交互很简单,最简单的就是下面的例子: 1 Py_Initialize(); 2 3 PyRun_SimpleString("str = \"hello\""); 4 PyRun_SimpleString("print str"); 5 6 Py_Finalize(); 与C在进入main函数前要做一些准备工...

centos性能优化cpu相关的测试及方法

工具下载地址https://src.fedoraproject.org/repo/pkgs/stress/stress-1.0.4.tar.gz/a607afa695a511765b40993a64c6e2f4/stress-1.0.4.tar.gzhttps://ftp.osuosl.org/pub/blfs/conglomeration/sysstat...

Python模块学习filecmp文件比较

Python模块学习filecmp文件比较 filecmp模块用于比较文件及文件夹的内容,它是一个轻量级的工具,使用非常简单。python标准库还提供了difflib模块用于比较文件的内容。关于difflib模块,且听下回分解 filecmp定义了两个函数,用于方便地比较文件与文件夹:  filecmp.cmp(f1, f2[, shallow]...

python 手机app数据爬取

今天向大家介绍app爬取。@ 目录 一:爬取主要流程简述 二:抓包工具Charles 1.Charles的使用 2.安装 (1)安装链接 (2)须知 (3)安装后 3.证书配置 (1)证书配置说明 (2)windows系统安装证书配置 (3)Android手机安装证书配置 4.开启SSL监听 5.原理 6.抓包 三:抓包工具mitm...