性能監控裝飾器-python

看項目時,發現一個性能監控裝飾器,感覺挺有意思的。于是借鑒了他的思路,自己重新寫了我認為更簡潔的代碼。

作用:可以放在類上和方法上,如果放在類上,則監控所有方法。根據設置的閾值,判斷方法執行是否超時了,如果超時,那么就記錄到日志文件當中去。

代碼如下:

import logging
import sys
import time
from functools import wraps
from time import sleeplogging.basicConfig(level=logging.INFO,# 時間 日志Logger的名稱 級別 信息format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',handlers=[logging.StreamHandler(sys.stdout),  # 控制臺輸出logging.FileHandler('app.log', 'a')  # 文件輸出]
)
logging = logging.getLogger(__name__)# threshold:閾值,默認為1s
def monitor_performance(threshold : int = 1):def decorator(func_or_class):if isinstance(func_or_class, type):  # 處理類裝飾器class WrappedClass(func_or_class):# 該方法會攔截訪問實例的方法def __getattribute__(self, name):attr = super().__getattribute__(name)# 攔截非私有方法if callable(attr) and not name.startswith("_"):# 保留函數的基礎信息@wraps(attr)def wrapped_method(*args, **kwargs):start_time = time.time()res = attr(*args, **kwargs)end_time = time.time()duration = end_time - start_timeif duration > threshold:logging.info(f"{func_or_class.__name__}.{name}耗時{end_time - start_time}s,超過了閾值{threshold}s")return resreturn wrapped_methodreturn attrreturn WrappedClasselse:  # 處理函數裝飾器@wraps(func_or_class)def wrapped_method(*args, **kwargs):start_time = time.time()res = func_or_class(*args, **kwargs)end_time = time.time()duration = end_time - start_timeif duration > threshold:logging.info(f"{func_or_class.__name__}耗時{end_time - start_time}s,超過了閾值{threshold}s")return resreturn wrapped_methodreturn decorator# @monitor_performance()
class Person:@monitor_performance()def test(self):sleep(3)print(".........")Person().test()

輸出如下:

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915953.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915953.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915953.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

qt常用控件-05

文章目錄qt常用控件-05LineEditTextEditcombo box結語很高興和大家見面,給生活加點impetus!!開啟今天的編程之路!! 今天我們進一步c11中常見的新增表達 作者:?( ‘ω’ )?260 我的專欄:qt&am…

Python進階知識之pandas庫

目錄 一、Series:一維帶標簽的數組 二、DataFrame:二維表格型數據結構 三、Series 的核心操作 四、 DataFrame 的核心操作 五、 索引的特殊用法 六、 loc 與 iloc:DataFrame 的高級查詢 七、綜合案例 一、Series:一維帶標簽…

【GIT】基礎知識及基本應用

很高興為您詳細介紹Git的相關知識。Git是一個分布式版本控制系統,常用于軟件開發中的代碼管理和協作。以下是關于Git的一些基礎知識:1. 安裝和配置安裝:Windows:可以從GitHub下載適用于Windows的安裝包。MacOS:可以通過…

Maven Scope標簽:解鎖Java項目依賴管理的秘密武器

一、Maven 與依賴管理簡介在 Java 項目開發的龐大體系中,Maven 堪稱基石般的存在,發揮著極為關鍵的作用。它遵循 “約定優于配置” 的理念,讓項目的構建過程變得規范有序、結構化且具備良好的重復性 。比如,它強制執行標準的項目結…

IP43半加固筆記本L156H

IP43半加固筆記本L156H 產品特性:● 標配Intel I7-7700HQ 4核8線程處理器 ● 操作系統支持Windows7/10 64bit / Li n u x ● DDR4 16G 高速內存 zui高支持64G ● 全高清顯示面板15.6寸,1920X1080 ● 內置海德射頻模塊SMA接口 ● 工作溫度:…

ZooKeeper 是什么?

ZooKeeper 是一個分布式協調服務,由 Apache 基金會開發,專為分布式系統設計。它提供了高可用、高性能、一致性的核心服務,幫助分布式應用解決諸如配置管理、命名服務、分布式鎖、集群協調等問題。ZooKeeper 的核心特點:簡單易用&a…

Java學習第六十三部分——K8s

目錄 📫 一、關鍵概述 🔍 ??二、定義起源?? 🚀 ??三、核心特點?? 🏗? ??四、核心組件?? 🧩 ??五、資源對象?? ? ??六、應用場景?? 🧱 ??七、Java與K8s 🛠? ?…

【自用】JavaSE--階段測試

考試題目第一題(10分)需求目前有100名囚犯,每個囚犯的編號是1-200之間的隨機數。現在要求依次隨機生成100名囚犯的編號(要求這些囚犯的編號是不能重復的),然后讓他們依次站成一排。(注:位置是從…

Vulnhub Matrix-Breakout-2-Morpheus靶機攻略

1.下載靶機 靶機下載地址:https://download.vulnhub.com/matrix-breakout/matrix-breakout-2-morpheus.ova 下載后使用VM打開,后續選擇安裝地址開啟就算是下載好了 2.主機發現 查看網絡適配器模式(NET模式),找到NET…

OpenCV —— 繪制圖形

😶?🌫?😶?🌫?😶?🌫?😶?🌫?Take your time ! 😶?🌫?😶?🌫?😶?🌫?😶?🌫?…

RHCE(4)

主:從:

網絡安全作業三

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用戶登錄</title><link rel"style…

深入理解 ThreadLocal:從原理到最佳實踐

&#x1f4dd; 前言&#xff1a;為什么你需要了解 ThreadLocal&#xff1f;在多線程并發編程中&#xff0c;線程安全始終是一個繞不開的話題。我們常常需要為每個線程維護一份獨立的上下文數據&#xff0c;例如用戶信息、事務 ID、日志追蹤 ID 等。這些數據不能被多個線程共享&…

AD一張原理圖分成多張原理圖

先選中你要作為主級原理圖的那張原理圖&#xff0c;我這里是Sheet1,點擊設計&#xff08;D&#xff09;&#xff0c;再點擊create sheet symbol from sheet&#xff08;這個不能選錯&#xff09;快捷鍵&#xff1a;DY彈窗中選擇要加入的次級原理圖左擊鼠標放置重復上面的動作&a…

AI大模型資源

網址 https://sass.kupepoem.cn/ 登錄-選擇模型 打開上述網址后如下操作&#xff1a; 進入后&#xff0c;所有模型均可使用&#xff1a; o4-mini&#xff08;支持Deep Research深入研究&#xff09; 選擇o4-mini模型 選擇深度研究 要研究什么&#xff0c;對話直接輸入即可。…

論文閱讀--《Besting the Black-Box: Barrier Zones for Adversarial Example Defense》

好的&#xff0c;這是《Besting the Black-Box: Barrier Zones for Adversarial Example Defense》論文的中文翻譯&#xff1a;[文件名稱]: Besting_the_Black-Box_Barrier_Zones_for_Adversarial_Example_Defense.pdf [文件內容開始]第 1 頁 收稿日期&#xff1a;2021年10月1…

如何保證GPFS文件系統的強一致性

一、底層機制&#xff1a;分布式鎖與元數據管理GPFS 通過分布式鎖和集中式元數據管理的結合&#xff0c;確保數據和元數據的一致性&#xff1a;集中式元數據服務器&#xff08;MDS&#xff09;GPFS 采用主從架構的元數據管理&#xff0c;由指定節點&#xff08;或集群&#xff…

使用Docker+Nginx部署電商平臺項目(服務端+管理端+商城)

1.項目背景&#xff1a; 本項目作為小商場系統&#xff0c;涵蓋內容如下&#xff1a; litemall Spring Boot后端 Vue管理員前端 微信小程序用戶前端 Vue用戶移動端 1.1項目架構&#xff1a; 1.2項目技術棧&#xff1a; 本項目可以使用window運行jar包本地部署&#xff0c…

Java網絡編程入門:從基礎原理到實踐(二)

目錄 1. 網絡編程基礎&#xff1a;搞懂設備通信的底層邏輯 1.1 為啥需要網絡編程&#xff1f;—— 讓設備 “互通有無” 1.2 什么是網絡編程&#xff1f;—— 給數據 “定規矩、找路線” 1.3 網絡編程的基本概念&#xff1a;理清通信里的角色和流程 1.3.1 發送端和接收端 …

XSS內容分享

反射型XSS &#xff1a;反射型XSS 是非持久性、參數型的跨站腳本。反射型XSS 的JS 代碼在Web 應用的參數&#xff08;變量&#xff09;中&#xff0c;如搜索框的反射型XSS。在搜索框中&#xff0c;提交PoC[scriptalert(/xss/)/script]&#xff0c;點擊搜索&#xff0c;即可觸發…