파이썬(Python) 내장 모듈인 time 모듈을 이용하면 현재 시간, 프로그램 수행 시간과 같은 시간 정보를 알아낼 수 있다. 이번 포스팅에서는 time 모듈을 이용하여 할 수 있는 것들에 대해서 알아본다.
time 모듈
1) GMT 기준 현재 시간, 타임존, 로컬 시차
time 모듈에서 time 함수는 1970년 1월 1일 0시 0분 0초에서 시작하여 GMT 기준으로 현재 시간을 초단위로 나타낸다. tzname 변수는 타임존을 알려주고 timezone 변수는 로컬 타임 즉, 대한민국과 GMT 기준과의 시차를 초단위로 알려준다.
from time import time, tzname, timezone
print(time()) ## gmt 기준
print(tzname) ## 타임존 이름
print(timezone) ## 로컬 타임과 gmt 기준 시차
-32400초는 시간 단위로 -9시간이며 이는 GMT 기준 시간은 대한민국 시간 대비 9시간 전을 나타내는 것을 의미한다.
2) struct_time 객체
앞에서 본 시간은 초단위로 되어 있어 사람이 이해하기가 어렵다. time 모듈에서는 사람이 이해하기 쉬운 형태로 시간 정보를 알려주는 struct_time 객체가 있다. gmtime을 이용하면 초단위 현재 시간을 struct_time 객체로 만들 수 있다.
아래 코드는 한국 시간으로 현재 시간을 struct_time으로 바꾼 것이다.
from time import timezone, gmtime
TIME_OFFSET = timezone ## GMT와 대한민국 간 시차
now_seconds = time()
now_struct_time = gmtime(now_seconds-TIME_OFFSET) ## GMT 기준을 대한민국 기준 시간으로 변경
print(now_struct_time)
struct_time에서 tm_year와 같은 속성들의 의미는 다음과 같다.
struct_time의 각 속성들은 해당 속성명으로 접근할 수 있다. 아래 코드는 struct_time 객체의 속성들을 이용하여 좀 더 이해하기 쉬운 문자열로 시간을 표현했다.
year = now_struct_time.tm_year ## 연도
month = now_struct_time.tm_mon ## 월
day = now_struct_time.tm_mday ## 일
hour = now_struct_time.tm_hour ## 시
minute = now_struct_time.tm_min ## 분
second = now_struct_time.tm_sec ## 초
print(f'{year}-{month}-{day} {hour}:{minute}:{second}')
3) 날짜 변환
time 모듈에서는 날짜 정보를 여러 가지 형태로 변환하기 위한 여러 가지 기능을 제공하고 있다. 아래 코드를 실행하면서 각 기능들이 어떤 역할을 하는지 살펴보자(주석 참고).
from time import ctime, strftime, strptime, mktime, localtime
from datetime import datetime
TIME_OFFSET = timezone
now_seconds = time()
now_struct_time = gmtime(now_seconds-TIME_OFFSET)
print(ctime(now_seconds)) ## 현재 시간을 로컬 기준으로 나타냄
print(strftime('%Y-%m-%d', now_struct_time)) ## struct_time을 문자열로 변환
## 문자열을 struct_time으로 변환
time_string = '2019-11-30 02:35:26 PM'
print(strptime(time_string, '%Y-%m-%d %H:%M:%S %p'))
print(mktime(now_struct_time)) ## struct_time을 초 단위로 변환
## struct_time을 datetime로 변환
print(datetime.fromtimestamp(mktime(now_struct_time)))
## 또는
local_strcut_time = localtime()
print(datetime(*local_strcut_time[:6]))
## datetime을 struct_time으로
datetime_obj = datetime(2019, 11, 30, 14, 35, 26)
struct_time_obj = datetime_obj.timetuple()
print(struct_time_obj)
4) 그외 많이 쓰는 것들
a. 실행 지연 : sleep
sleep 함수는 특정 시간(초 단위) 만큼 실행을 지연한다. 아래 코드는 5번 반복하면서 인덱스를 출력하는데 인덱스가 3인 경우 실행을 2초간 지연한다.
from time import sleep
for i in range(5):
if i == 3:
print('실행을 2초간 중지합니다')
sleep(2)
print(i)
b. 함수 실행 속도 측도 : perf_counter, process_time
perf_counter와 process_time은 모두 특정 함수의 실행 속도를 측정하는 데 사용할 수 있다. 차이점은 perf_counter는 sleep과 같은 실행 지연시간을 포함하지만 process_time은 제외한다.
예제를 살펴보자. 아래 코드에서 do_job 함수는 총 1000번의 반복문을 도는데 두 번째 반복에서 1초간 실행 중지한다.
from time import perf_counter, process_time
def do_job():
for i in range(1000):
if i == 1:
sleep(1)
이 경우 process_time과 perf_counter를 이용한 실행 시간의 차이를 살펴보자.
start_time = process_time()
do_job()
run_time = process_time()-start_time
print(f'함수 실행 시간 : {run_time}초')
실제로 sleep이 동작했음에도 불구하고 process_time은 이러한 실행 지연 시간을 계산하지 않았다. 이번엔 perf_counter을 이용하여 동일하게 실행 시간을 측정해보자.
start_time = perf_counter()
do_job()
run_time = perf_counter()-start_time
print(f'함수 실행 시간 : {run_time}초')
perf_counter는 실행 지연 시간이 포함된 것을 알 수 있다.
'프로그래밍 > Python' 카테고리의 다른 글
파이썬(Python) 폴더와 파일 다루기 (feat. os, pathlib) (2) | 2023.04.14 |
---|---|
파이썬(Python) statistics 모듈을 이용한 통계량 계산하기 (0) | 2023.03.25 |
[병렬 프로그래밍] 5. multiprocessing 모듈을 이용하여 여러 인자를 갖는 함수 병렬 처리하기 (feat. starmap) (0) | 2023.03.22 |
파이썬(Python) logging 모듈을 이용한 로그(Log) 남기기 (2) | 2023.03.21 |
파이썬(Python) 달력 다루기 (feat. calendar) (0) | 2023.03.18 |
댓글