我在具有16GB Ram和64位操作系统的Linux机器上运行Python 2.7.我编写的python脚本可以将太多数据加载到内存中,这会使机器速度降低到我甚至无法再杀死进程的程度.虽然我可以通过调用来限制内存:ulimit -v 12000000在...

我在具有16GB Ram和64位操作系统的Linux机器上运行Python 2.7.我编写的python脚本可以将太多数据加载到内存中,这会使机器速度降低到我甚至无法再杀死进程的程度.
虽然我可以通过调用来限制内存:
ulimit -v 12000000
在运行脚本之前的shell中,我想在脚本本身中包含一个限制选项.在我看的每个地方,资源模块被引用为具有与ulimit相同的功能.但是打电话:
import resource
_, hard = resource.getrlimit(resource.RLIMIT_DATA)
resource.setrlimit(resource.RLIMIT_DATA, (12000, hard))
在我的脚本开头做什么都没有.即使设置低至12000的值也从未使过程崩溃.我尝试使用RLIMIT_STACK,结果相同.奇怪的是,打电话:
import subprocess
subprocess.call('ulimit -v 12000', shell=True)
什么都不做.
我究竟做错了什么?我在网上找不到任何实际的用法示例.
编辑:对于任何好奇的人,使用subprocess.call不起作用,因为它创建了一个(惊喜,惊喜!)新进程,它独立于当前python程序运行的进程.
解决方法:
resource.RLIMIT_VMEM是资源corresponding to ulimit -v.
RLIMIT_DATA only affects brk/sbrk system calls而newer memory managers tend to use mmap instead.
需要注意的第二件事是ulimit/setrlimit只影响当前进程及其未来的子进程.
关于AttributeError:’module’对象没有属性’RLIMIT_VMEM’消息:resource module docs提到了这种可能性:
This module does not attempt to mask platform differences — symbols
not defined for a platform will not be available from this module on
that platform.
根据上面链接的bash ulimit source,如果未定义RLIMIT_VMEM,则使用RLIMIT_AS.
本文标题为:如何在python进程中限制内存使用


基础教程推荐
- Python matplotlib绘制灰度和彩色直方图 2023-08-09
- Python 切片为什么不会索引越界? 2023-08-11
- Python – 如何在脚本运行时隐藏Windows命令提示符屏幕? 2023-11-15
- windows下使用pycharm配置python的virtualenv环境 2023-09-04
- python猜数字小游戏实现代码 2023-08-04
- 如果列表后没有足够的连续内存,CPython处理列表的方式如何扩展? 2023-11-11
- Python pygame派生精灵和精灵组创建敌机 2022-09-02
- python-nginx / gunicorn Django Rest Framework应用程序的端口代理 2023-11-14
- Windows下Python环境搭建 2023-09-03
- Python遗传算法Geatpy工具箱使用介绍 2022-10-20