언어·프레임워크/Python

[Python] time 모듈: time.time(), time.perf_counter(), time.process_time() 설명

DandyNow 2025. 5. 12. 14:04
728x90
반응형

Python time 모듈: time.time(), time.perf_counter(), time.process_time() 설명

Python의 time 모듈은 시간 관련 기능을 제공한다. 이 모듈 내에는 다양한 시간 측정 함수들이 있는데, 그중 time.time(), time.perf_counter(), time.process_time()은 프로그램의 성능 측정이나 경과 시간 계산에 자주 사용되는 함수이다. 각 함수의 특징과 용도를 명확히 이해하는 것은 효율적인 코드 작성에 도움이 된다.

1. time.time()

time.time() 함수는 Epoch(일반적으로 1970년 1월 1일 0시 0분 0초 UTC) 이후 경과한 시간을 초 단위로 반환한다. 이 값은 부동 소수점 형태로 나타내며, 운영체제의 시스템 시계에 의존한다.

  • 특징
    • 시스템 시계 의존성: 시스템 시계의 변경(예: 수동으로 시간 변경, NTP 동기화)에 영향을 받는다. 즉, 연속적으로 호출해도 값이 역행할 수 있다.
    • 절대 시간: 특정 시점(Epoch)으로부터의 절대 시간을 측정한다.
    • 정확도: 운영체제 및 하드웨어에 따라 정밀도가 달라질 수 있다.
  • 용도
    • 파일 생성 시간 기록, 네트워크 요청 시간 측정 등 시스템 시계와 관련된 절대 시간이 필요할 때 사용한다.
    • datetime 객체로 변환하여 특정 날짜와 시간을 다룰 때 유용하다.

2. time.perf_counter()

time.perf_counter() 함수는 운영체제의 고정된(monotonic) 시간 측정 카운터를 사용한다. 이는 시스템 시계의 변경에 영향을 받지 않으며, 시스템 부팅 이후 경과한 시간(혹은 임의의 시작점)을 가장 높은 정밀도로 반환한다.

  • 특징
    • 단조 증가(Monotonic): 시스템 시계 변경에 관계없이 항상 증가하는 값이다. 절대 역행하지 않는다.
    • 최고 정밀도: 사용 가능한 가장 높은 해상도의 타이머를 제공한다.
    • 상대 시간: 주로 두 시점 사이의 경과 시간을 측정하는 데 사용한다. 반환되는 값 자체는 의미 없는 시작점을 기준으로 하므로, 특정 절대 시간을 나타내지는 않는다.
  • 용도
    • 프로그램의 실행 시간, 특정 코드 블록의 성능 측정 등 시간의 '경과'를 측정하는 데 가장 적합하다.
    • 게임 개발, 고성능 컴퓨팅 등 정확한 시간 측정이 요구되는 분야에서 유용하다.

3. time.process_time()

time.process_time() 함수는 현재 프로세스의 시스템 및 사용자 CPU 시간을 초 단위로 반환한다. 이 시간은 프로세스가 실제로 CPU를 사용한 시간만을 합산한 것이며, 다른 프로세스가 실행되거나 I/O 대기 등으로 인해 프로세스가 CPU를 사용하지 않은 시간은 포함하지 않는다.

  • 특징
    • 프로세스 CPU 시간: 현재 프로세스가 소비한 CPU 시간만을 측정한다.
    • 단조 증가(Monotonic): perf_counter()와 마찬가지로 단조 증가한다.
    • 시스템 시계 및 수면 시간 무시: 시스템 시계 변경에 영향을 받지 않으며, 프로세스가 대기(sleep) 상태이거나 I/O 작업으로 인해 블록된 시간은 측정에서 제외된다.
  • 용도
    • 특정 알고리즘이나 함수의 CPU 사용량을 측정하여 성능 병목 지점을 파악하는 데 유용하다.
    • 멀티태스킹 환경에서 특정 프로세스가 CPU를 얼마나 효율적으로 사용하는지 분석할 때 사용한다.

결론

각 함수의 특징을 정리하면 다음과 같다.

함수 기준점 속성 주 용도
time.time() Epoch(1970.1.1 00:00:00 UTC) 시스템 시계 의존, 절대 시간 절대 시간 기록, 날짜/시간 처리
time.perf_counter() 임의의 시작점(주로 시스템 부팅 이후) 단조 증가, 최고 정밀도, 상대 시간 프로그램 실행 경과 시간 측정
time.process_time() 프로세스 시작점 단조 증가, 프로세스 CPU 시간 특정 프로세스의 CPU 사용량 측정

 

프로그램의 성능을 측정하고 최적화할 때는 time.perf_counter()time.process_time()을 주로 사용하며, 특히 전체 실행 시간을 측정할 때는 time.perf_counter()가 적합하고, 특정 작업의 CPU 사용량을 측정할 때는 time.process_time()이 유용하다. 반면 time.time()은 절대 시간 정보를 얻을 때 사용된다.

728x90
반응형