Spaces:
Sleeping
Sleeping
| """ | |
| ์ฑ๋ฅ ์ธก์ ๋ฐ ๋ชจ๋ํฐ๋ง ์ ํธ๋ฆฌํฐ ๋ชจ๋ | |
| """ | |
| import time | |
| import logging | |
| import functools | |
| import traceback | |
| import psutil | |
| import os | |
| import platform | |
| import gc | |
| from typing import Callable, Any | |
| # ๋ก๊น ์ค์ | |
| logger = logging.getLogger(__name__) | |
| def performance_logger(func): | |
| """ | |
| ํจ์ ์คํ ์๊ฐ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ก๊น ํ๋ ๋ฐ์ฝ๋ ์ดํฐ | |
| Args: | |
| func (callable): ์ธก์ ํ ํจ์ | |
| Returns: | |
| callable: ๋ํ๋ ํจ์ | |
| """ | |
| async def wrapper(*args, **kwargs): | |
| # ์์ ์๊ฐ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ธก์ | |
| start_time = time.time() | |
| start_memory = 0 | |
| try: | |
| # ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ธก์ (๊ฐ๋ฅํ ๊ฒฝ์ฐ) | |
| if psutil: | |
| process = psutil.Process(os.getpid()) | |
| start_memory = process.memory_info().rss / 1024 / 1024 # MB ๋จ์ | |
| except Exception: | |
| pass | |
| # ํจ์ ํธ์ถ | |
| try: | |
| result = await func(*args, **kwargs) | |
| except Exception as e: | |
| logger.error(f"ํจ์ {func.__name__} ์คํ ์ค ์ค๋ฅ ๋ฐ์: {str(e)}") | |
| logger.error(traceback.format_exc()) | |
| raise | |
| # ์ข ๋ฃ ์๊ฐ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ธก์ | |
| end_time = time.time() | |
| end_memory = 0 | |
| try: | |
| if psutil: | |
| process = psutil.Process(os.getpid()) | |
| end_memory = process.memory_info().rss / 1024 / 1024 # MB ๋จ์ | |
| except Exception: | |
| pass | |
| # ์คํ ์ ๋ณด ๋ก๊น | |
| execution_time = end_time - start_time | |
| memory_usage = end_memory - start_memory if end_memory > 0 else 0 | |
| logger.info(f"ํจ์ {func.__name__} ์คํ ์๊ฐ: {execution_time:.4f}์ด") | |
| if end_memory > 0: | |
| logger.info(f"ํจ์ {func.__name__} ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ณํ: {memory_usage:.2f} MB (์์: {start_memory:.2f} MB, ์ข ๋ฃ: {end_memory:.2f} MB)") | |
| return result | |
| return wrapper | |
| def log_system_info(): | |
| """์์คํ ์ ๋ณด ๋ก๊น """ | |
| try: | |
| logger.info("===== ์์คํ ์ ๋ณด =====") | |
| logger.info(f"OS: {platform.system()} {platform.release()}") | |
| logger.info(f"Python ๋ฒ์ : {platform.python_version()}") | |
| if psutil: | |
| # CPU ์ ๋ณด | |
| cpu_count = psutil.cpu_count(logical=False) | |
| cpu_count_logical = psutil.cpu_count(logical=True) | |
| logger.info(f"CPU: {cpu_count} ์ฝ์ด ({cpu_count_logical} ๋ ผ๋ฆฌ ํ๋ก์ธ์)") | |
| # ๋ฉ๋ชจ๋ฆฌ ์ ๋ณด | |
| mem = psutil.virtual_memory() | |
| total_mem = mem.total / (1024 * 1024 * 1024) # GB ๋จ์ | |
| available_mem = mem.available / (1024 * 1024 * 1024) # GB ๋จ์ | |
| logger.info(f"๋ฉ๋ชจ๋ฆฌ: ์ด {total_mem:.2f} GB (์ฌ์ฉ ๊ฐ๋ฅ: {available_mem:.2f} GB)") | |
| # ๋์คํฌ ์ ๋ณด | |
| disk = psutil.disk_usage('/') | |
| total_disk = disk.total / (1024 * 1024 * 1024) # GB ๋จ์ | |
| free_disk = disk.free / (1024 * 1024 * 1024) # GB ๋จ์ | |
| logger.info(f"๋์คํฌ: ์ด {total_disk:.2f} GB (์ฌ์ ๊ณต๊ฐ: {free_disk:.2f} GB)") | |
| logger.info("=======================") | |
| except Exception as e: | |
| logger.error(f"์์คํ ์ ๋ณด ๋ก๊น ์ค ์ค๋ฅ ๋ฐ์: {str(e)}") | |
| def cleanup_memory(): | |
| """ | |
| ๋ฉ๋ชจ๋ฆฌ ์ ๋ฆฌ ํจ์ - ๊ธด ์์ ํ ๋ฉ๋ชจ๋ฆฌ ์ ๋ฆฌ์ ์ฌ์ฉ | |
| """ | |
| try: | |
| # ๊ฐ๋น์ง ์ปฌ๋ ์ ๊ฐ์ ์คํ | |
| collected = gc.collect() | |
| logger.debug(f"๊ฐ๋น์ง ์ปฌ๋ ์ ์คํ: {collected}๊ฐ ๊ฐ์ฒด ์์ง") | |
| # ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ก๊น (๊ฐ๋ฅํ ๊ฒฝ์ฐ) | |
| if psutil: | |
| process = psutil.Process(os.getpid()) | |
| memory_usage = process.memory_info().rss / 1024 / 1024 # MB ๋จ์ | |
| logger.debug(f"ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋: {memory_usage:.2f} MB") | |
| except Exception as e: | |
| logger.error(f"๋ฉ๋ชจ๋ฆฌ ์ ๋ฆฌ ์ค ์ค๋ฅ ๋ฐ์: {str(e)}") |