首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何限制python进程中的内存使用

如何限制python进程中的内存使用
EN

Stack Overflow用户
提问于 2015-05-16 05:45:36
回答 1查看 17.4K关注 0票数 22

我在Linux机器上运行Python2.7,内存为16 OS,操作系统为64位。我写的一个python脚本可能会将过多的数据加载到内存中,这会使机器变慢,以至于我甚至不能再终止进程。

而我可以通过调用以下命令来限制内存:

代码语言:javascript
复制
ulimit -v 12000000

在运行脚本之前,我希望在脚本本身中包含一个限制选项。在我看过的所有地方,resource模块都被认为具有与ulimit相同的功能。但呼唤:

代码语言:javascript
复制
import resource
_, hard = resource.getrlimit(resource.RLIMIT_DATA)
resource.setrlimit(resource.RLIMIT_DATA, (12000, hard))

在我的脚本一开始,什么也不做。即使将该值设置为12000,也不会导致进程崩溃。我用RLIMIT_STACK做了同样的尝试,也得到了同样的结果。奇怪的是,我在呼唤:

代码语言:javascript
复制
import subprocess
subprocess.call('ulimit -v 12000', shell=True)

也不做任何事情。

我做错了什么?我在网上找不到任何实际的用法示例。

编辑:对于任何好奇的人来说,使用subprocess.call是行不通的,因为它创造了一个(惊喜,惊喜!)新进程,它独立于当前运行python程序的进程。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-16 07:02:56

resource.RLIMIT_VMEM为资源corresponding to ulimit -v

RLIMIT_DATA only affects brk/sbrk system calls while newer memory managers tend to use mmap instead.

需要注意的第二件事是,ulimit/setrlimit只影响当前进程及其未来的子进程。

关于AttributeError: 'module' object has no attribute 'RLIMIT_VMEM'消息:resource module docs提到了这种可能性:

此模块不会尝试屏蔽平台差异-未为平台定义的符号在该平台上的此模块中不可用。

根据上面链接的bash ulimit source,如果没有定义RLIMIT_AS,则使用RLIMIT_VMEM

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30269238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档