首页 > 其他分享 >Fastapi--资源监管

Fastapi--资源监管

时间:2024-07-18 17:42:54浏览次数:11  
标签:-- Fastapi self 监管 gb memory usage gpu cpu

class ResItemLiveness(BaseModel):
    resCode: int = 0
    resMsg: str = ""
    resData: dict = dict()

    def status_check(self, cpu_thresh, memory_thresh, gpu_memory_thresh, cpu_intervel: int = 1, gpu_index: int = 0):
        # CPU资源查询
        gb = 1024**3
        cpu_logical_cores  = psutil.cpu_count(logical=True)
        cpu_physical_cores = psutil.cpu_count(logical=False)
        cpu_usage          = psutil.cpu_percent(interval=cpu_intervel)
        if (100 - cpu_usage) < cpu_thresh:
            self.resMsg += f"CPUError: CPU resources have been used by {cpu_usage}%, with an expected remaining {cpu_thresh}%."
            self.resCode = 1

        # 内存资源查询
        memory_usage = psutil.virtual_memory()
        memory_able = (memory_usage.total - memory_usage.used) / gb
        if memory_able < memory_thresh:
            self.resMsg += f"MemroyError: Insufficient memory resources, expected to have {memory_thresh}(GB) "\
                f"of free space, with {memory_able}(GB) of remaining resources."
            self.resCode = 1

        # GPU资源查询——限查询Nvidia显卡资源
        try:
            import pynvml
            pynvml.nvmlInit()
            device_count = pynvml.nvmlDeviceGetCount()
            check_gpu_index = gpu_index if gpu_index < device_count else 0
            handle = pynvml.nvmlDeviceGetHandleByIndex(check_gpu_index)
            memory_info = pynvml.nvmlDeviceGetMemoryInfo(handle)
            usage = pynvml.nvmlDeviceGetUtilizationRates(handle)
            free_memory = memory_info.free / gb
            if free_memory < gpu_memory_thresh:
                self.resMsg += f"GPUError: Insufficient gpu-memory resources, expected to have {gpu_memory_thresh}(GB) of "\
                    f"free space, with {free_memory}(GB) of remaining resources."
                self.resCode = 1
            gpu_resource = {
                "numGPU": device_count,
                "currentIndexGPU": check_gpu_index,
                "totalMemoryGPU": memory_info.total / gb,
                "usedMemoryGPU": memory_info.used / gb,
                "freeMemoryGPU": free_memory,
                "utilizationRateGPU": usage.gpu,
                "utilizationMemoryGPU": usage.memory
            }
        except Exception as e:
            gpu_resource = {
                "numGPU": -1,
                "totalMemoryGPU": -1,
                "usedMemoryGPU": -1,
                "freeMemoryGPU": -1,
                "currentIndexGPU": -1,
                "utilizationRateGPU": 0,
                "utilizationMemoryGPU": 0
            }
            self.resMsg += str(e)
            self.resCode = 1
        

        # 设置实例属性
        resourceCheck = {
            "logicalCores": cpu_logical_cores,
            "physicalCores": cpu_physical_cores,
            "cpuUsage": cpu_usage,
            "memoryTotal": memory_usage.total / gb,
            "memoryAvailable": memory_usage.available / gb,
            "memoryFree": memory_usage.free / gb,
            "memoryUsed": memory_usage.used / gb,
            "memoryActive": memory_usage.active / gb,
            "memoryInactive": memory_usage.inactive / gb,
            "memoryBuffers": memory_usage.buffers / gb,
            "memoryCached": memory_usage.cached / gb,
            "memoryShared": memory_usage.shared / gb,
            "memorySlab": memory_usage.slab / gb,
            "memoryPercent": memory_usage.percent / gb

        }
        resourceCheck.update(gpu_resource)
        self.resData = resourceCheck

标签:--,Fastapi,self,监管,gb,memory,usage,gpu,cpu
From: https://www.cnblogs.com/dan-baishucaizi/p/18310094

相关文章

  • FastStone Capture v10.6 解锁版 (一款优秀的支持屏幕录制、滚动截图、高清长图、图片
    前言FastStoneCapture是一款极简主义的应用程序,它简单易用,可以捕捉屏幕上的任意区域,提供多种捕获模式,包括活动窗口、指定窗口/对象、矩形区域、手绘区域、整个屏幕和滚动窗口等。此外,FastStoneCapture还附带屏幕录像机、放大镜、取色器和标尺等辅助功能。其体积小巧,但功能强......
  • # Windows 定时删除指定路径下N天前的日志文件
    Windows下bat脚本文件的内容为1.删除指定路径下5天前的所有文件@echooffsetSrcDir=E:\WORK\GitsetDaysAgo=5forfiles/p%SrcDir%/s/m*.*/d-%DaysAgo%/c"cmd/cdel/f/q/a@path"2.删除指定路径下5天前的所有log文件@echooffsetSrcDir=E:\WORK\Git//指......
  • 5.java命令程序介绍
    五java命令程序介绍 javac 编译工具:将原文件编译成计算机可以识别的语言 格式: javachello-world.java 执行完该命令后,在源文件的目录下会生成一个新的class文件,称之为运行文件 java 调用虚拟机(JVM)运行java的class文件(可执行文件名称) 格式: java+字节码文件......
  • 4.java程序开发体验-hello-World
    四java程序开发体验--helloworldjava代码格式:有开始(class)---区间({})有结尾()1.将java代码编写到扩展名为.java的文件中去。编写源文件classdemo{ publicstaticvoidmain(String[]args) { System.out.print("hellojava"); }}2.通过javac命令对该java文件进......
  • 3.java-环境搭建
    三java语言的环境搭建1.了解JREJDK JRE(javaruntimeenvironmentjava运行环境) 包括java虚拟机(JVM)和java程序所需的核心类库等,如果想要一个开发好的java程序,计算机中只需要安装JRE即可。 JDK(javadevelopmentkitjava开发工具包) jdk是提供给java开发人员使用的,其中包含......
  • 2.java介绍
    二java介绍1.java语言概述 是sun(Stanforduniversitynetwork斯坦福大学网络公司)1995年推出的一门高级编程语言 是一种面向Internet的编程语言 随着java技术在web方面的不断成熟,已经成为web应用程序的首选开发语言。 是简单易学的,完全面向对象,安全可靠,与平台无关的编程语言......
  • 1.软件开发介绍
    一软件开发1.什么是软件开发 软件:一系列按照特定顺序组织的计算机数据和指令的集合。 常见软件: 系统软件:DOSWindowsLinux等 应用软件:扫雷微信QQ等2.什么是开发 制作软件 软件的出现实现了人与计算机之间的更好的交互 交互方式: 图形化界面: 这种方式简单......
  • GICV3中断控制器调用流程
    GICV3中断控制器初始化调用链/kernel/irq/handle.c:#ifdefCONFIG_GENERIC_IRQ_MULTI_HANDLERint__initset_handle_irq(void(*handle_irq)(structpt_regs*)){if(handle_arch_irq)return-EBUSY;handle_arch_irq=handle_irq;return0;}#en......
  • SpringBoot增加验证码
    一、加入验证码依赖包com.github.whvcseeasy-captcha1.6.2二、实现验证码控制层@GetMapping("/common/kaptcha")publicvoiddefaultKaptcha(HttpServletRequesthttpServletRequest,HttpServletResponsehttpServletResponse)throwsException{httpServletRespo......
  • AMD R2000 Bilby 单板 串口在Grub和Linux下的使用
    Ubuntu20启动时,自动加载了UART驱动,系统启动信息含有UART的相关信息。[2.418748]printk:console[ttyS4]disabled[2.418757]AMDI0020:00:ttyS4atMMIO0xfedc9000(irq=3,base_baud=3000000)isa16550A[2.418820]printk:console[ttyS4]enabled[......