gpt4 book ai didi

python - 如何限制堆大小?

转载 作者:IT老高 更新时间:2023-10-28 12:35:52 29 4
gpt4 key购买 nike

我有时会编写 Python 程序,这些程序很难在执行前确定它会使用多少内存。因此,我有时会调用一个尝试分配大量 RAM 的 Python 程序,从而导致内核大量交换并降低其他正在运行的进程的性能。

因此,我希望限制 Python 堆可以增长多少内存。当达到限制时,程序可以简单地崩溃。最好的方法是什么?

如果重要的话,很多代码都是用 Cython 编写的,所以它应该考虑到那里分配的内存。我没有嫁给纯 Python 解决方案(它不需要是可移植的),所以在 Linux 上运行的任何东西都很好。

最佳答案

查看 resource.setrlimit() .它仅适用于 Unix 系统,但它似乎是您正在寻找的,因为您可以使用 resource.RLIMIT_DATA 参数为您的进程和您的进程的子进程选择最大堆大小。

编辑:添加示例:

import resource

rsrc = resource.RLIMIT_DATA
soft, hard = resource.getrlimit(rsrc)
print 'Soft limit starts as :', soft

resource.setrlimit(rsrc, (1024, hard)) #limit to one kilobyte

soft, hard = resource.getrlimit(rsrc)
print 'Soft limit changed to :', soft

我不确定您的用例到底是什么,但您可能需要使用 resouce.RLIMIT_STACK 来限制堆栈的大小。超过此限制将向您的进程发送一个 SIGSEGV 信号,并且要处理它,您需要使用 setrlimit Linux manpage 中所述的备用信号堆栈.不过,我不确定 sigaltstack 是否在 python 中实现,所以如果你想从越过这个边界中恢复过来,这可能会很困难。

关于python - 如何限制堆大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2308091/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com