asefasdfcv commited on
Commit
02d9941
ยท
verified ยท
1 Parent(s): cb155f0

Create performance.py

Browse files
Files changed (1) hide show
  1. utils/performance.py +117 -0
utils/performance.py ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ ์„ฑ๋Šฅ ์ธก์ • ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ชจ๋“ˆ
3
+ """
4
+ import time
5
+ import logging
6
+ import functools
7
+ import traceback
8
+ import psutil
9
+ import os
10
+ import platform
11
+ import gc
12
+ from typing import Callable, Any
13
+
14
+ # ๋กœ๊น… ์„ค์ •
15
+ logger = logging.getLogger(__name__)
16
+
17
+ def performance_logger(func):
18
+ """
19
+ ํ•จ์ˆ˜ ์‹คํ–‰ ์‹œ๊ฐ„ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๋กœ๊น…ํ•˜๋Š” ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ
20
+
21
+ Args:
22
+ func (callable): ์ธก์ •ํ•  ํ•จ์ˆ˜
23
+
24
+ Returns:
25
+ callable: ๋ž˜ํ•‘๋œ ํ•จ์ˆ˜
26
+ """
27
+ @functools.wraps(func)
28
+ async def wrapper(*args, **kwargs):
29
+ # ์‹œ์ž‘ ์‹œ๊ฐ„ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ธก์ •
30
+ start_time = time.time()
31
+ start_memory = 0
32
+
33
+ try:
34
+ # ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ธก์ • (๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ)
35
+ if psutil:
36
+ process = psutil.Process(os.getpid())
37
+ start_memory = process.memory_info().rss / 1024 / 1024 # MB ๋‹จ์œ„
38
+ except Exception:
39
+ pass
40
+
41
+ # ํ•จ์ˆ˜ ํ˜ธ์ถœ
42
+ try:
43
+ result = await func(*args, **kwargs)
44
+ except Exception as e:
45
+ logger.error(f"ํ•จ์ˆ˜ {func.__name__} ์‹คํ–‰ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}")
46
+ logger.error(traceback.format_exc())
47
+ raise
48
+
49
+ # ์ข…๋ฃŒ ์‹œ๊ฐ„ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ธก์ •
50
+ end_time = time.time()
51
+ end_memory = 0
52
+
53
+ try:
54
+ if psutil:
55
+ process = psutil.Process(os.getpid())
56
+ end_memory = process.memory_info().rss / 1024 / 1024 # MB ๋‹จ์œ„
57
+ except Exception:
58
+ pass
59
+
60
+ # ์‹คํ–‰ ์ •๋ณด ๋กœ๊น…
61
+ execution_time = end_time - start_time
62
+ memory_usage = end_memory - start_memory if end_memory > 0 else 0
63
+
64
+ logger.info(f"ํ•จ์ˆ˜ {func.__name__} ์‹คํ–‰ ์‹œ๊ฐ„: {execution_time:.4f}์ดˆ")
65
+
66
+ if end_memory > 0:
67
+ logger.info(f"ํ•จ์ˆ˜ {func.__name__} ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋ณ€ํ™”: {memory_usage:.2f} MB (์‹œ์ž‘: {start_memory:.2f} MB, ์ข…๋ฃŒ: {end_memory:.2f} MB)")
68
+
69
+ return result
70
+
71
+ return wrapper
72
+
73
+ def log_system_info():
74
+ """์‹œ์Šคํ…œ ์ •๋ณด ๋กœ๊น…"""
75
+ try:
76
+ logger.info("===== ์‹œ์Šคํ…œ ์ •๋ณด =====")
77
+ logger.info(f"OS: {platform.system()} {platform.release()}")
78
+ logger.info(f"Python ๋ฒ„์ „: {platform.python_version()}")
79
+
80
+ if psutil:
81
+ # CPU ์ •๋ณด
82
+ cpu_count = psutil.cpu_count(logical=False)
83
+ cpu_count_logical = psutil.cpu_count(logical=True)
84
+ logger.info(f"CPU: {cpu_count} ์ฝ”์–ด ({cpu_count_logical} ๋…ผ๋ฆฌ ํ”„๋กœ์„ธ์„œ)")
85
+
86
+ # ๋ฉ”๋ชจ๋ฆฌ ์ •๋ณด
87
+ mem = psutil.virtual_memory()
88
+ total_mem = mem.total / (1024 * 1024 * 1024) # GB ๋‹จ์œ„
89
+ available_mem = mem.available / (1024 * 1024 * 1024) # GB ๋‹จ์œ„
90
+ logger.info(f"๋ฉ”๋ชจ๋ฆฌ: ์ด {total_mem:.2f} GB (์‚ฌ์šฉ ๊ฐ€๋Šฅ: {available_mem:.2f} GB)")
91
+
92
+ # ๋””์Šคํฌ ์ •๋ณด
93
+ disk = psutil.disk_usage('/')
94
+ total_disk = disk.total / (1024 * 1024 * 1024) # GB ๋‹จ์œ„
95
+ free_disk = disk.free / (1024 * 1024 * 1024) # GB ๋‹จ์œ„
96
+ logger.info(f"๋””์Šคํฌ: ์ด {total_disk:.2f} GB (์—ฌ์œ  ๊ณต๊ฐ„: {free_disk:.2f} GB)")
97
+
98
+ logger.info("=======================")
99
+ except Exception as e:
100
+ logger.error(f"์‹œ์Šคํ…œ ์ •๋ณด ๋กœ๊น… ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}")
101
+
102
+ def cleanup_memory():
103
+ """
104
+ ๋ฉ”๋ชจ๋ฆฌ ์ •๋ฆฌ ํ•จ์ˆ˜ - ๊ธด ์ž‘์—… ํ›„ ๋ฉ”๋ชจ๋ฆฌ ์ •๋ฆฌ์— ์‚ฌ์šฉ
105
+ """
106
+ try:
107
+ # ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๊ฐ•์ œ ์‹คํ–‰
108
+ collected = gc.collect()
109
+ logger.debug(f"๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์‹คํ–‰: {collected}๊ฐœ ๊ฐ์ฒด ์ˆ˜์ง‘")
110
+
111
+ # ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋กœ๊น… (๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ)
112
+ if psutil:
113
+ process = psutil.Process(os.getpid())
114
+ memory_usage = process.memory_info().rss / 1024 / 1024 # MB ๋‹จ์œ„
115
+ logger.debug(f"ํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰: {memory_usage:.2f} MB")
116
+ except Exception as e:
117
+ logger.error(f"๋ฉ”๋ชจ๋ฆฌ ์ •๋ฆฌ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}")