Notice
Recent Posts
Recent Comments
Link
개발부터 자유까지
[Python] time 함수 비교 본문
아래는 time.time() / time.perf_counter() / time.process_time() / time.monotonic() 네 가지 타이머 함수의 정확한 차이점 정리입니다.
전체 비교표
| 함수 | 목적 | 증가 방식 | 시스템 시간 변경 영향 | 일시정지 (절전) 영향 |
CPU 시간 기준 |
정밀도 | 사용 용도 |
|
time.time()
|
현재 시각 확인 (Unix timestamp) | 실제 시간 기준 | ✔ 영향 받음 (NTP 동기화 등) | ✔ 영향 받음 | ✖ | 중 | 현재 시각 출력, 로깅 |
|
time.perf_counter()
|
가장 정확한 성능 측정용 | 모노토닉 타이머 | ✖ 영향 없음 | ✖ 영향 없음 | ✖ | 매우 높음 | 코드 실행 시간 측정(성능 테스트) |
|
time.process_time()
|
CPU 사용 시간 측정 | CPU가 작업한 시간만 증가 | ✖ 영향 없음 | ✖ 영향 없음 | ✔ CPU time only | 높음 | 알고리즘 CPU 사용량 측정 |
|
time.monotonic()
|
뒤로 되돌아가지 않는 시간 측정 | 모노토닉 타이머 | ✖ 영향 없음 | ✖ 영향 없음 | ✖ | 높음 | 경과 시간 측정(시계 튐 방지) |
1. time.time()
✔ 특징
- 현재 시간을 초 단위 float로 반환 (UNIX timestamp)
- 가장 일반적인 시간 함수
- 시스템 시간 변경에 영향을 받음
→ NTP 동기화 / 관리자 설정 변경하면 값이 앞뒤로 튈 수 있음 - 정확한 소요 시간 측정용으로는 부적합
✔ 예시
import time
print(time.time()) # 1739193812.12345
2. time.perf_counter()
✔ 특징
- Python에서 가장 정밀도가 높은 고해상도 타이머
- 부팅 후 증가하는 시간(정확한 소요 시간을 측정)
- 시스템 시간 변경, 절전, 일시정지에 영향 없음
- 성능 측정(benchmark)에 가장 적합한 함수
✔ 활용 예
start = time.perf_counter()
# 수행 코드
end = time.perf_counter()
print(end - start)
3. time.process_time()
✔ 특징
- CPU가 실제로 사용된 시간만 증가
- sleep(), I/O 대기 등 CPU 사용이 없는 시간은 카운트되지 않음
- 절전, 시스템 시간 변경, real-time 흐름과 무관
- 알고리즘의 CPU 소모량 측정에 적합
✔ 예시
import time
start = time.process_time()
# CPU 많이 쓰는 작업
end = time.process_time()
print(end - start) # CPU가 실제로 사용된 시간만 출력됨
4. time.monotonic()
✔ 특징
- 절대로 뒤로 가지 않는(monotonic) 타이머
- 시스템 시간 변경 영향 없음
- perf_counter보다 정밀도가 낮을 수 있지만 목적은 동일:
→ 경과 시간 측정용 - perf_counter()와 비슷하지만 보장하는 정밀도는 플랫폼마다 다름
→ 일반적으로 perf_counter()가 좀 더 고정밀
✔ 예시
import time
start = time.monotonic()
# some work
end = time.monotonic()
print(end - start)
🧠 언제 어떤 걸 써야 하나?
✔ 현재 시각을 알고 싶다
→ time.time()
✔ 코드 실행 시간을 정확하게 측정하고 싶다 (benchmark)
→ time.perf_counter() (가장 추천)
✔ 알고리즘이 CPU를 얼마나 썼는지 알고 싶다
→ time.process_time()
✔ 시스템 시간 변경에도 영향을 받지 않는 경과 시간 측정
→ time.monotonic()
'Python' 카테고리의 다른 글
| [Python] uv 기본 사용법 (0) | 2025.11.05 |
|---|---|
| [Python] redis-py 설치 및 사용법 (0) | 2025.10.14 |
| [Python] async, sync, block, non-blocking 비교 및 사용방법 (1) | 2025.09.17 |
| [Python] 유니코드, 내장함수 ord, chr (0) | 2025.04.10 |
| [Python] input vs sys.stdin.readline (0) | 2024.08.25 |