给内存和cpu使用量设置限制
在linux系统中,使用Python对内存和cpu使用量设置限制需要通过resource模块来完成。
resource文档地址:resource — Resource usage information
限制Python进程cpu使用时间的样例如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import signal import resource import os def time_exceeded(signo, frame): print ( "time's up" ) raise SystemExit( 1 ) def set_max_runtime(seconds): soft,hard = resource.getrlimit(resource.RLIMIT_CPU) resource.setrlimit(resource.RLIMIT_CPU, (seconds, hard)) signal.signal(signal.SIGXCPU, time_exceeded) if __name__ = = '__main__' : set_max_runtime( 5 ) while True : pass |
运行上述代码,当超时时会产生SIGXCPU信号。程序就会做清理工作然后退出。
要限制内存的使用可以使用如下函数
1
2
3
|
def limit_memory(maxsize): soft, hard = resource.getrlimit(resource.RLIMIT_AS) resource.setrlimit(resource.RLIMIT_AS, (maxsize, hard)) |
当设定了内存限制后,如果没有更多的内存可用,程序就会开始产生MemoryError异常。
注:以上示例代码来源于:《Python Cookbook》P575 “给内存和cpu使用量设置限制”。
查询windows的cpu、内存使用率
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# -*- coding: UTF-8 -*- import os def get_info(metric): metric_cmd_map = { "cpu_usage_rate" : "wmic cpu get loadpercentage" , "mem_total" : "wmic ComputerSystem get TotalPhysicalMemory" , "mem_free" : "wmic OS get FreePhysicalMemory" } out = os.popen( "{}" . format (metric_cmd_map.get(metric))) value = out.read().split( "\n" )[ 2 ] out.close() return float (value) # cpu使用率 cpu_usage_rate = get_info( 'cpu_usage_rate' ) print ( "windows的CPU使用率是{}%" . format (cpu_usage_rate)) # 无法直接查出内存使用率,总内存单位是b,而剩余内存单位是kb mem_total = get_info( 'mem_total' ) / 1024 mem_free = get_info( 'mem_free' ) mem_usage_rate = ( 1 - mem_free / mem_total) * 100 print ( "windows的内存使用率是{}%" . format (mem_usage_rate)) |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_32188669/article/details/107966322