안녕하세요 파이신입니다.
- 본 글은 파이썬 중급자 이상이 읽어 보기에 적합합니다.
from datetime import datetime, timedelta
dt1 = datetime(2024,1,25,10,5,0)
dt2 = dt1 + timedelta(hours = 2)
print(dt2)
시간차이를 구하는 간단한 예입니다.
파이썬을 처음 접했을 때 datetime에서 %Y와 %y의 사소한 차이 때문에
몇 시간 동안 당황했던 기억이 납니다.
다음 코드에서 확인해 봅니다.
from datetime import datetime
dt1 = datetime.now()
dt1 = datetime(2020,1,1,2,2,3)
print(dt1)
print('{0:%Y-%m-%d} {0:%H:%M:%S}'.format(dt1))
print('{0:%Y %m} {0:%d %H %M %S}'.format(dt1))
print('{0:%Y %m %d %H %M %S}'.format(dt1))
print('{0:%Y %m %d %H %M %S}'.format(dt1))
print('{0:%Y %m %d %H %M %S}'.format(dt1))
print('{:%H %M %S}'.format(dt1))
print('{:%H}'.format(dt1))
print('{1}{0}'.format('1','3'))
print(f'{dt1.year} {dt1.month:02d} {dt1.day:02d} {dt1.hour:02d}')
일반적인 사용입니다. 아래에서 소문자로 바꿔봅니다.
print('{0:%y-%m-%d} {0:%H:%M:%S}'.format(dt1))
결과가 달라집니다.
이렇게만 찍어보면, 바로 알 수 있는 건데, 중첩된 코드가 갑자기 동작을 안 해서
원인을 찾느라 힘들었던 기억이 납니다. 오래전에요.
포맷을 좀 달리 해봅니다.
from datetime import datetime
dt1 = datetime.now()
print('{0:%Y-%m-%d %H:%M%S %p}'.format(dt1))
print('{0:%A %a %w}'.format(dt1))
print('{0:%B %b}'.format(dt1))
이번엔 locale을 사용해 봅니다.
import locale
from datetime import datetime
locale_ori = locale.getlocale()
print(locale_ori)
dt1 = datetime.now()
locale.setlocale(locale.LC_ALL,'ko_KR.UTF-8')
print('{0:%A %a %w %B %b}'.format(dt1))
포맷만 바꾸어 봅니다.
import locale
from datetime import datetime
locale_ori = locale.getlocale()
print(locale_ori)
dt1 = datetime.now()
string_time = dt1.strftime('%Y %m %d %H %M %S')
print(string_time)
schedule을 사용해 봅니다.
multi thread와 multi processor에서 공통변수에 접근하는 문제는
항상 어려운 문제입니다.
별도로 관리하자니 코드가 우아하지 않게 되고,
직접 하자니 신경 쓸 게 많고 그런 문제죠.
간단한 작업들은 스케줄을 반복해서 이용해도 효과적입니다.
물론 부하도 적고, 메모리 문제도 발생하지 않는다는 전제에 그렇습니다.
정해진 시간에만 실행시키는 용도 말고도 활용할 수 있다는 정도로 이해하면
좋을 것 같습니다.
기본 코드입니다.
import schedule
import time
from datetime import datetime
def job():
print(f'schedule..{datetime.now()}')
schedule.every(3).seconds.do(job)
schedule.every().minute.at(':5').do(job)
while True:
try :
schedule.run_pending()
time.sleep(1)
except:
schedule.clear()
break;
스케쥴을 재귀에 포함시켜도 잘 동작합니다.
비슷한 코드입니다.
import schedule
from datetime import datetime
import time
def func1(a):
print(f'run : {a} : {datetime.now()}')
schedule.every(5).seconds.do(func1,'korea')
while True:
try:
schedule.run_pending()
time.sleep(1)
except:
schedule.clear()
break
직관적인 코드로 다시 만들어 보겠습니다.
import schedule
from datetime import datetime
import time
def func1(a):
print(f'func 1 : {a} : {datetime.now()}')
def func2(a):
print(f'func 2 : {a} : {datetime.now()}')
scheduler1 = schedule.Scheduler()
scheduler2 = schedule.Scheduler()
scheduler1.every(5).seconds.do(func1,'korea')
scheduler2.every(3).seconds.do(func2,'japan')
while True:
try:
scheduler1.run_pending()
scheduler2.run_pending()
time.sleep(1)
except:
scheduler1.clear()
scheduler2.clear()
break
즐거운 코딩 생활 되기 바랍니다.
'파이썬' 카테고리의 다른 글
깃허브 git download 사용방법 sqlcipher3 설치 파이썬 (0) | 2024.03.19 |
---|---|
FreeTypeFont object has no attribute 'measure_text' (0) | 2024.03.17 |
카카오 API 이미지 가져오는 방법. 파이썬 (0) | 2024.03.16 |
공개 API로 전세계 시간 가져오기. 파이썬 (0) | 2024.03.15 |
카카오 API 파이썬으로 사용하는 방법 (0) | 2024.03.14 |
PIXABAY REST API.by Python. (0) | 2024.03.13 |
픽사베이 무료이미지 사이트 API로 가져오는 방법 (0) | 2024.03.12 |
픽사베이 사이트 무료이미지 API 이용하는 방법 (0) | 2024.03.11 |