📜  Python|如何限制内存和 CPU 使用率

📅  最后修改于: 2022-05-13 01:55:03.103000             🧑  作者: Mango

Python|如何限制内存和 CPU 使用率

本文旨在展示如何限制正在运行的程序的内存或 CPU 使用。这样做很好,可以使用资源模块,因此两个任务都可以很好地执行,如下面的代码所示:

代码 #1:限制 CPU 时间

# importing libraries
import signal
import resource
import os
  
# checking time limit exceed
def time_exceeded(signo, frame):
    print("Time's up !")
    raise SystemExit(1)
  
def set_max_runtime(seconds):
    # setting up the resource limit
    soft, hard = resource.getrlimit(resource.RLIMIT_CPU)
    resource.setrlimit(resource.RLIMIT_CPU, (seconds, hard))
    signal.signal(signal.SIGXCPU, time_exceeded)
  
# max run time of 15 millisecond
if __name__ == '__main__':
    set_max_runtime(15)
    while True:
        pass

SIGXCPU 信号在运行此代码的时间到期时产生,程序可以清理并退出。代码#2:为了限制内存使用,代码对总地址空间进行了限制

# using resource 
import resource
  
def limit_memory(maxsize):
    soft, hard = resource.getrlimit(resource.RLIMIT_AS)
    resource.setrlimit(resource.RLIMIT_AS, (maxsize, hard))

当没有更多可用内存时,程序将开始生成具有内存限制的 MemoryError 异常。

这个怎么运作 ?

  • 要对特定资源设置软硬限制,请使用setrlimit()函数。
  • 软限制是操作系统将通过信号通知进程或通常对其进行限制的值。
  • 值的上限由硬限制定义,它可以用于软限制。
  • 尽管可以降低硬限制,但用户进程永远无法提高硬限制,并且由系统管理员设置的系统范围参数控制。 (即使过程降低了自身)。
  • setrlimit()函数还可以用于设置诸如子进程数量、打开文件数量和类似系统资源之类的限制。

本文中的代码仅适用于 Unix 系统,并且可能不适用于所有系统。