Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 如何让pytest对测试设置内存限制?_Memory_Pytest - Fatal编程技术网

Memory 如何让pytest对测试设置内存限制?

Memory 如何让pytest对测试设置内存限制?,memory,pytest,Memory,Pytest,我正在使用pytest,但我希望有一个装饰器,可以设置每个测试的最大内存使用量。与此类似,答案是 @pytest.mark.timeout(300) def test_foo(): pass 我要 @pytest.mark.maxmem(300) def test_foo(): pass 编辑: 我试过了 >>> import os, psutil >>> import numpy as np >>> process = ps

我正在使用pytest,但我希望有一个装饰器,可以设置每个测试的最大内存使用量。与此类似,答案是

@pytest.mark.timeout(300)
def test_foo():
   pass
我要

@pytest.mark.maxmem(300)
def test_foo():
   pass
编辑:

我试过了

>>> import os, psutil
>>> import numpy as np
>>> process = psutil.Process(os.getpid())
>>> process.memory_info().rss/1e9
0.01978368
>>> def f():
...     x = np.arange(int(1e9))
... 
>>> process.memory_info().rss/1e9
0.01982464
>>> f()
>>> process.memory_info().rss/1e9
0.019832832
它没有捕捉到函数中的内存分配。

在学习了如何使用并查看了多少之后,我编写了一个decorator,如果内存增量太高,就会出错。设置限制有点麻烦,但对我来说已经足够好了

导入资源、操作系统、psutil
进口numpy
def内存限制(最大内存):
def装饰器(f):
def包装(*args,**kwargs):
process=psutil.process(os.getpid())
prev_limits=resource.getrlimit(resource.RLIMIT_AS)
resource.setrlimit(
resource.RLIMIT_作为(
process.memory_info().rss+max_mem,-1
)
)
结果=f(*args,**kwargs)
resource.setrlimit(resource.RLIMIT_AS,prev_limits)
返回结果
返回包装器
返回装饰器
@内存限制(int(16e8))
def分配(N):
返回numpy.arange(N,dtype='u8')
a=[为范围(10)中的i分配(int(1e8)]
尝试:
分配(int(3e8))
除:
出口(0)
引发异常(“应已失败”)

至少在我的机器上,代码运行和退出时不会出错。

这看起来很棒。您能详细说明一下设置限制时出现的一些错误吗?请注意,装饰程序说的是
@memory\u limit(int(16e8))
,但是try/except块在
分配(int(3e8))
时失败。“有点不对劲”意味着我找不到这两个数字之间的明显关系,但就我而言,一个近似值是可以的。虽然小但有效!你可以用它制作一个pytest插件,可以通过pip/pypi.org安装