# -*- coding: utf8 -*-
import time
import psutil
import os
from functools import wraps
def monitor_resources(func):
@wraps(func)
def wrapper(*args, **kwargs):
process = psutil.Process(os.getpid()) # 获取当前进程
# 获取初始资源占用情况
initial_memory = process.memory_info().rss # 以字节为单位
initial_cpu = process.cpu_percent(interval=0.1) # 获取CPU使用率
initial_disk_io = psutil.disk_io_counters() # 获取磁盘I/O信息
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
end_memory = process.memory_info().rss
end_cpu = process.cpu_percent(interval=0.1)
end_disk_io = psutil.disk_io_counters()
# 计算耗时、内存使用、CPU使用率和磁盘IO
duration = end_time - start_time
memory_used = (end_memory - initial_memory) / (1024 * 1024)
cpu_used = end_cpu
disk_read = end_disk_io.read_bytes - initial_disk_io.read_bytes
disk_write = end_disk_io.write_bytes - initial_disk_io.write_bytes
# 输出资源使用情况
print("function:{func_name} executed cost time:{cost_time}秒".format(func_name=func.__name__, cost_time=duration))
print("function:{func_name} executed memory_used:{memory_used}MB".format(func_name=func.__name__, memory_used=memory_used))
print("function:{func_name} executed cpu_used:{cpu_used}%".format(func_name=func.__name__, cpu_used=cpu_used))
print("function:{func_name} executed Disk I/O - Read:{disk_read}MB,Write:{disk_write}MB".format(func_name=func.__name__,
disk_read=disk_read / (1024 ** 2),
disk_write=disk_write / (1024 ** 2)))
return result
return wrapper
@monitor_resources
def example_function():
"""
模拟调用
"""
total = 0
for i in range(10**7):
total += i
return total
if __name__ == '__main__':
# 调用示例函数
example_function()
输出结果如下