홈>
코드 블록을 실행하는 데 걸리는 시간을 측정하기 위해 타이머를 구현하고 싶습니다. 그런 다음 여러 디렉토리 (4+)에서 여러 모듈 (40+)을 포함하는 전체 응용 프로그램 에서이 작업을 수행하려고합니다.
타이머는 다음과 같은 구조를 가진 클래스 내에있는 두 개의 함수로 만들어집니다 :
class SubClass(Class1)
def getStartTime(self):
start = time.time()
return start
def logTiming(self, classstring, start):
fin = time.time() - start
logging.getLogger('perf_log_handler').info((classstring + ' sec').format(round(fin,3)))
첫 번째 함수는 시작 시간을 가져오고 두 번째 함수는 블록이 실행되는 시간을 계산 한 다음 로거에 기록합니다.
이 코드는 module1.py라고 부르는 모듈에 있습니다.
실제로 일반적으로 다음과 같이 구현됩니다 :
class SubSubClass(SubClass)
def Some_Process
stim = super().getStartTime()
code..............................
...
...
...
...
super().logTiming("The Process took: {}", stim)
return Result_Of_Process
이 코드는 module2.py라는 모듈에 있으며 이미 작동하고 성공적으로 기록됩니다. 내 문제는 이와 같이 구조화 될 때 SubClass의 우산 아래에있는 코드 내부의 타이머 만 사용할 수있는 것 같습니다. 응용 프로그램이 렌더링되지 않고 내 페이지에서 "페이지를 찾을 수 없습니다"오류가 발생합니다. 브라우저). 그러나 전 세계 모든 응용 프로그램 모듈의 모든 곳 에서이 코드를 사용하고 싶습니다. 모듈이 다른 디렉토리에 있는지 여부, 일부 코드 블록이 다른 모듈 내의 다른 클래스 및 서브 클래스 내에 있는지 여부
애플리케이션의 어느 곳에서나 사용할 수 있도록이 타이밍 계측기를 만드는 가장 쉽고 효율적인 방법은 무엇입니까? 나는 그것을 완전히 다르게 정의해야 할 수도 있음을 이해합니다. 나는이 모든 것에 매우 익숙하므로 어떤 도움을 주셔서 감사합니다.
- 답변 # 1
- 답변 # 2
당신이 무엇을 찾고 있는지 잘 모르겠지만, 옛날에는 비슷한 유형의 문제에 데코레이터를 사용했습니다.
아래 스 니펫은 당시 구현 한 내용과 가장 비슷합니다. 희망이 당신에게 유용합니다.
간단한 설명 <올>와이즈 비즈 파이썬 객체의 메소드를 감싸고 메소드를 곱한 '장식 자'입니다.
클래스에
timed
가 포함되어 있습니다 래퍼에 의해log
로 업데이트됩니다. 메소드가 호출됩니다.당신이
@timed
를 만들고 싶다면 이 게시물에서 영감을 얻을 수있는 "클래스 속성"역할을합니다.@property
from time import sleep, time # ----------------- # Define Decorators # ------------------ def timed(wrapped): def wrapper(self, *arg, **kwargs): start = time() res = wrapped(self, *arg, **kwargs) stop = time() self.log = {'method': wrapped.__name__, 'called': start, 'elapsed': stop - start} return res return wrapper # ----------------- # Define Classes # ------------------ class Test(object): __log = [] @property def log(self): return self.__log @log.setter def log(self, kwargs): self.__log.append(kwargs) @timed def test(self): print("Running timed method") sleep(2) @timed def test2(self, a, b=2): print("Running another timed method") sleep(2) return a+b # :::::::::::::::::: if __name__ == '__main__': t = Test() res = t.test() res = t.test2(1) print(t.log)
관련 자료
- python - "randomcall"이라는 자체 함수 정의
- python 함수 - tkinter 메뉴 및 메뉴 항목
- 범위 (시작, 중지, 단계)와 유사한 윤년 함수를 만들기 위해 Python을 얻는 방법은 무엇입니까?
- nltk - 함수에서 목록의 추가 공백을 제거하십시오파이썬
- javascript - React stateless 컴포넌트 내부에 함수를 정의해도 괜찮습니까?
- arrays - 이 함수 (C ++)의 루프 외부에서 카운트 변수를 정의 할 수없는 이유
- Python function - Python 함수 — 연결 목록의 시작과 끝에 값을 삽입하는 — 연결 목록을 수정하지 않습니다
- VBA Excel 함수에서 사용할 컬렉션 정의
- pandas - Python 람다 함수가 Series에서 하위 문자열을 제거하지 못함
- Don't Run Async Function if Lock is Locked - 잠금이 잠긴 경우 비동기 기능을 실행하지 마십시오파이썬
- c++ - 재귀 함수에서 변수를 한 번만 정의하고 초기화하는 방법은 무엇입니까?
- 함수 혼란을 뒤집는 파이썬 목록
- 파이썬 cmp () 함수
- numpy - 파이썬 - x, y 쌍의 점이 주어진 라이브러리 함수는 해당 쌍에 가장 가까운 쌍인 xn, yn을 찾습니다
- return 문이 파이썬에서 함수 본문의 일부입니까?
- Python에서 함수에서 클래스로 목록 전달
- c++ - 파생 유형을 매개 변수로 사용하는 가상 함수를 어떻게 정의 할 수 있습니까?
- Google Cloud 함수에서 실행하기 위해 Python 스크립트를 사용하여 여러 부분으로 zip 파일을 추출하는 방법
- Python에서 매개 변수로 전달 된 함수를 호출하는 방법
- sqlalchemy - 돌아온 다음 파이썬에서 다른 함수가 끝날 때까지 기다립니다
관련 질문
- python : 파이썬에서 클래스 메서드를 호출할 수 없습니다.
- 함수에 대한 인수로서의 Pandas DataFrame -Python
- Visual Studio 2022의 함수 호출에서 ($0)은 무엇을 의미합니까?
- python : 클래스를 인스턴스화할 때 인스턴스화된 객체에 대해 클래스 자체와 동일한 이름을 사용하지 않는 규칙이 있습니까?
- python : 모든 열에 대해 0 값 수와 0의 %를 찾고 파이썬에서 Excel로 내보내는 함수를 작성하는 방법
- c++ : 클래스의 멤버 함수에서 개인 값을 수정할 수 없습니다.
- attrs python 패키지로 기본 메소드를 호출하는 방법
- python : 전역 변수가 아닌 여러 함수에서 하나의 값을 조작하는 더 나은 솔루션이 있습니까?
- python : pandas.apply를 사용하여 Pandas DataFrame의 항목이 목록에 있는지 확인하는 방법
- python 클래스: @property 데코레이터로 속성을 설정하려고 할 때 최대 재귀가 발생하는 이유는 무엇입니까?
OPTION 1) 다른 모듈을 정의해야합니다 (예 : 타이머 전용의 "mytimer.py":
그리고 예를 들어 module2.py와 같은 코드 줄에서 :
OPTION 2) 클래스 대신 간단한 함수를 사용할 수도 있습니다.
그리고 코드에서 :