我有时会编写Python程序,这些程序在执行之前很难确定它将使用多少内存.因此,我有时会调用一个试图分配大量RAM的Python程序,导致内核大量交换并降低其他正在运行的进程的性能.
因此,我希望限制Python堆可以增加多少内存.达到限制时,程序可能会崩溃.最好的方法是什么?
如果重要,很多代码都是用Cython编写的,所以它应该考虑那里分配的内存.我没有与纯Python解决方案结合(它不需要是可移植的),所以在Linux上运行的任何东西都可以.
关于杀死使用过多内存的进程之前我已经问过这个问题,而且我已经解决了大部分问题.
然而,有一个问题:计算大量数字似乎不受我试图使用的方法的影响.下面的代码旨在为进程设置10秒的CPU时间限制.
import resource
import os
import signal
def timeRanOut(n, stack):
raise SystemExit('ran out of time!')
signal.signal(signal.SIGXCPU, timeRanOut)
soft,hard = resource.getrlimit(resource.RLIMIT_CPU)
print(soft,hard)
resource.setrlimit(resource.RLIMIT_CPU, (10, 100))
y = 10**(10**10)
Run Code Online (Sandbox Code Playgroud)
我希望在运行此脚本(在Unix机器上)时看到的是:
-1 -1
ran out of time!
Run Code Online (Sandbox Code Playgroud)
相反,我没有输出.我获得输出的唯一方法是使用Ctrl+ C,如果我在10秒后Ctrl+ 我得到这个C:
^C-1 -1
ran out of time!
CPU time limit exceeded
Run Code Online (Sandbox Code Playgroud)
如果I Ctrl+ C 在 10秒之前,那么我必须做两次,并且控制台输出如下所示:
^C-1 -1
^CTraceback (most recent call last):
File "procLimitTest.py", line 18, in <module> …Run Code Online (Sandbox Code Playgroud) 我想要一个监视进程的"系统",并在以下情况下杀死所述进程:
我认为这个"系统"可能像监控过程一样简单吗?如何做到这一点的代码示例将是有用的.我当然不反对这个问题的完全不同的解决方案.