Python time 모듈 완전 분석|처리 시간 측정 및 로그 타임스탬프 추가 방법

1. Python의 time 모듈이란?

1.1 time 모듈 개요

Python의time 모듈은 프로그램 내에서 시간 및 날짜와 관련된 작업을 수행하기 위한 표준 라이브러리 중 하나입니다. 이 모듈은 시스템 시계에 기반하여 에포크(1970년 1월 1일 00:00:00 UTC)부터 경과된 초를 얻기 위해 로그 파일에 타임스탬프를 부여하거나 프로그램의 성능 측정 등에 사용됩니다. time 모듈의 주요 장점은 그 단순함입니다. 복잡한 설정이 필요 없으며 쉽게 사용할 수 있어 기본적인 시간 관리와 측정에 적합합니다.

1.2 주요 기능 소개

time 모듈에는 다양한 시간 관련 함수가 제공됩니다. 대표적인 것은 다음과 같습니다:
  • time.time(): 에포크부터 경과된 초를 부동소수점으로 반환합니다.
  • time.sleep(secs): 프로그램 실행을 지정한 초만큼 멈춥니다. 이는 처리를 일시적으로 중단하고 싶을 때 유용합니다.
  • time.ctime(): 타임스탬프를 사람이 읽기 쉬운 형식으로 변환합니다.
이러한 함수를 사용하면 간단한 시간 조작부터 고급 측정까지 폭넓게 대응할 수 있습니다.

2. 현재 시각을 가져오는 방법

2.1 time.time()를 사용한 현재 시각 가져오기

time.time() 함수는 에포크부터 경과한 초를 반환합니다. 이 함수는 간단하며, 현재 시각을 가져올 때 가장 기본적인 방법입니다. 예시는 아래와 같습니다.
import time
current_time = time.time()
print(current_time)
위 코드는 현재 에포크 타임(부동소수점 형태의 초)을 표시합니다. 에포크 타임은 주로 프로그램 내부에서 시간을 계산할 때 사용되지만, 사람에게는 직관적으로 이해하기 어려우므로 다음 섹션에서 소개하는strftime()을 사용해 포맷하는 것이 일반적입니다.

2.2 strftime()를 사용해 사람이 읽기 쉬운 형식으로 변환

time.strftime()는 에포크 타임을 연월일이나 시각 등의 형식으로 변환하기 위한 함수입니다. 특히 로그 파일이나 시간 표시가 필요한 상황에서 유용합니다. 다음 코드는 현재 시각을「년-월-일 시:분:초」형식으로 표시합니다.
import time
formatted_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
print(formatted_time)
이 예에서는 time.localtime()을 사용해 현재 타임스탬프를 로컬 시간으로 변환하고, strftime()으로 포맷합니다. %Y는 4자리 연도, %m은 월, %d는 일을 나타냅니다. 이를 통해 시간 데이터를 쉽게 사람이 이해하기 쉬운 형식으로 변환할 수 있습니다.

3. 처리 시간을 측정하는 방법

3.1 time.time()를 사용한 기본적인 처리 시간 측정

처리 시간을 측정할 때 가장 간단한 방법은 time.time()를 사용하는 방법입니다. 이는 처리 시작 시점과 종료 시점을 가져와 그 차이를 계산함으로써 처리에 걸린 시간을 측정합니다.
import time
start_time = time.time()

# 예: 루프 처리
for i in range(1000000):
    pass

end_time = time.time()
print(f"처리 시간: {end_time - start_time} 초")
이 예에서는 루프 처리에 걸리는 시간을 측정하고 있습니다. time.time()는 초 단위로 시간을 측정하기 때문에 정밀도가 그리 높지는 않지만, 간단한 처리 시간을 측정할 때는 충분합니다.

3.2 perf_counter()를 이용한 고정밀 측정

보다 높은 정밀도의 측정이 필요할 경우 perf_counter()를 사용합니다. 이는 시스템의 퍼포먼스 카운터를 이용해 보다 정밀한 시간 측정을 할 수 있습니다.
import time
start_time = time.perf_counter()

# 고정밀 측정
for i in range(1000000):
    pass

end_time = time.perf_counter()
print(f"고정밀 처리 시간: {end_time - start_time} 초")
perf_counter()는 나노초 단위의 정밀도를 가지고 있어, 시간에 민감한 애플리케이션이나 성능 최적화에 최적입니다.

3.3 timeit 모듈을 사용한 벤치마크

성능 벤치마크를 수행할 경우 timeit 모듈이 편리합니다. 이 모듈은 특정 처리를 반복 실행하고, 그 평균 처리 시간을 측정합니다.
import timeit
print(timeit.timeit('"-".join(str(n) for n in range(100))', number=10000))
이 코드에서는 리스트 요소를 결합하는 처리를 10,000번 반복하여 그 평균 처리 시간을 측정하고 있습니다. timeit은 노이즈 영향을 최소화하여 정확한 측정이 가능하므로, 성능 비교에 적합합니다.

4. 날짜 조작: datetime 모듈과의 비교

4.1 datetime.now()를 사용한 현재 시각 가져오기

Python의 time 모듈과 마찬가지로, datetime 모듈도 매우 유용합니다. 특히, 날짜와 시간에 관련된 작업이나 날짜 계산이 필요할 때 datetime 모듈이 적합합니다.
from datetime import datetime
now = datetime.now()
print(now)
이 코드는 현재 날짜와 시간을 가져와 datetime 객체로 표시합니다. datetime 모듈을 사용하면 시간 계산 및 타임존 관리도 쉽게 할 수 있어 보다 복잡한 날짜·시간 조작이 가능합니다.

4.2 time 모듈과 datetime 모듈의 사용 구분

time 모듈은 간단하고 고정밀 시간 측정에 적합하지만, 날짜·시간 조작에는 datetime 모듈이 더 적합합니다. 예를 들어, 특정 날짜를 다루는 애플리케이션이나 시각 계산이 필요한 경우 datetime 모듈이 더 편리합니다.
侍エンジニア塾

5. 실용 예: time 모듈 활용 방법

5.1 로그에 타임스탬프를 추가하는 방법

프로그램 내에서 이벤트를 추적하기 위해 로그 파일에 타임스탬프를 추가하는 경우가 많습니다。time.ctime()를 사용하면、쉽게 현재 타임스탬프를 얻어 로그에 기록할 수 있습니다。
import time
log_entry = f"{time.ctime()} - 에러 메시지"
print(log_entry)
이와 같이、time.ctime()를 사용하면、사람이 읽기 쉬운 형식으로 현재 시간을 로그에 추가할 수 있습니다。

5.2 프로그램의 성능 최적화

성능 최적화를 수행할 때、시간 측정을 활용하여 병목이 되는 처리를 식별할 수 있습니다。time 모듈과timeit 모듈을 사용하여、프로그램 전체나 특정 함수의 실행 시간을 측정하고、최적화를 수행함으로써 처리 속도 향상이 가능합니다。

6. 요약

Python의 time 모듈은 기본적인 시간 조작을 매우 간단하게 처리할 수 있어, 프로그램 개발의 다양한 상황에서 유용합니다. 처리 시간 측정이나 로그 파일에 타임스탬프를 부여하는 기본적인 작업부터, perf_counter()timeit 모듈을 사용한 고급 시간 측정까지, 폭넓은 기능을 제공합니다. 특히 성능 최적화나 타이밍과 관련된 작업에서는 time 모듈이 간편하고 강력한 도구입니다. 또한, 보다 복잡한 날짜·시간 조작이 필요할 경우 datetime 모듈을 함께 사용하면, 타임존 지원 및 상세한 날짜·시간 계산도 쉽게 할 수 있습니다. 각 모듈의 특성을 이해하고 적절히 활용함으로써, Python 프로그램의 효율성과 실용성이 향상될 것입니다.
侍エンジニア塾