我目前正在运行一些单元测试,可能需要很长时间才能失败或无限期运行.在成功的测试运行中,它们将始终在一定的时间内完成.
是否有可能创建一个pytest单元测试,如果它在一定时间内没有完成就会失败?
我试图setrlimit限制我在Linux系统上的内存使用,以阻止我的进程崩溃机器(我的代码崩溃了高性能集群上的节点,因为一个错误导致内存消耗超过100 GiB ).我似乎无法找到传递给他的正确资源setrlimit; 我认为它应该是常驻的,不能用setrlimit限制,但我对常驻,堆,堆栈感到困惑.在下面的代码中; 如果我只取消注释RLIMIT_AS,代码将失败MemoryError,numpy.ones(shape=(1000, 1000, 10), dtype="f8")即使该数组应该只有80 MB.如果我只取消注释RLIMIT_DATA,RLIMIT_RSS或RLIMIT_STACK两个阵列获得成功分配,即使总内存使用量为2 GB,或两次所需的最大.
我想让我的程序一旦尝试分配太多RAM就失败(无论如何).为什么所有的RLIMIT_DATA,RLIMIT_RSS,RLIMIT_STACK和RLIMIT_AS做什么,我的意思是,什么是正确的资源传递给setrlimit?
$ cat mwe.py
#!/usr/bin/env python3.5
import resource
import numpy
#rsrc = resource.RLIMIT_AS
#rsrc = resource.RLIMIT_DATA
#rsrc = resource.RLIMIT_RSS
#rsrc = resource.RLIMIT_STACK
soft, hard = resource.getrlimit(rsrc)
print("Limit starts as:", soft, hard)
resource.setrlimit(rsrc, (1e9, 1e9))
soft, hard = resource.getrlimit(rsrc)
print("Limit is now:", soft, …Run Code Online (Sandbox Code Playgroud)