限制内存:Python 崩溃而不是抛出 MemoryError 异常

4
我有一个Python程序,有时会消耗大量的RAM。我尝试通过
resource.setrlimit(resource.RLIMIT_AS, (2**32, 2**32))
来限制使用,但这导致Python崩溃而不是引发 MemoryError
如何让Python保持运行呢?即我希望能够出现 想要的 MemoryError。

当我尝试在cvxpy中解决大型实例时出现了问题。(这也意味着我不能减少代码的内存使用量-这不是我的代码。)但是,当我通过以下方式分配大量RAM时: 然后像预期的那样出现了 MemoryError
这有什么不同之处吗?
编辑:错误消息是:

terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc

编辑:我现在有一个(M)WE。
import cvxpy as cvx
import numpy as np
import random
import resource
resource.setrlimit(resource.RLIMIT_AS, (2**32, 2**32))

# Problem data.
m = 500
n = 500
np.random.seed(1)
random.seed(1)
A = np.random.randn(m, n)
b = np.random.randn(m, 1)

# Construct the problem.
X = cvx.Semidef(m)
objective = cvx.Minimize(cvx.sum_entries(cvx.norm(X)))
constraints = [sum([X[random.randint(0,499),random.randint(0,499)] for _ in range(50)]) >= random.random() for _ in range(5000)]
prob = cvx.Problem(objective, constraints)

print("Optimal value", prob.solve(solver = 'SCS'))

几秒钟后,它开始占用大量内存(超过1GB,这应该是限制),然后崩溃并显示上述错误。


1
“causes Python to crash” 究竟是什么意思?有堆栈跟踪吗? - MSeifert
1个回答

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接