[python] 파이썬 스케쥴 수행 - python schedule, apscheduler
파이썬에서 특정 시간마다 배치를 돌릴 수 있는 스케쥴링을 수행할 수 있는 모듈이 2개가 있다.
1) schedule
2) apscheduler
1) schedule
schedule은 명령어가 직관적으로 알아볼 수 있어 사용이 용이하다.
설정이 복잡해질 경우 사용 여부를 고려하는 것이 좋다.
# schedule 설치
> pip install schedule
# 사용 방법
import schedule
import time
def job():
print("Hello world!")
# 10초에 한번씩 실행
schedule.every(10).seconds.do(job)
# 10분에 한번씩 실행
schedule.every(10).minutes.do(job)
# 매 시간 실행
schedule.every().hour.do(job)
# 매일 10:30 에 실행
schedule.every().day.at("10:30").do(job)
# 매주 월요일 실행
schedule.every().monday.do(job)
# 매주 수요일 13:15 에 실행
schedule.every().wednesday.at("13:15").do(job)
while True:
schedule.run_pending()
time.sleep(1)
- 함수에 인자를 전달하는 방법
# 사용 방법
import schedule
import time
def job(text):
print(text)
# job("Hello world!") 를 10초에 한번씩 실행
schedule.every(10).seconds.do(job, "text")
while True:
schedule.run_pending()
time.sleep(1)
2) apscheduler
수행 방식은 3가지가 있다.
- Cron 방식: Cron 표현식으로 수행
- Date 방식: 특정 날짜에 수행
- Interval 방식: 일정 주기로 수행
각 방식마다 파라미터가 달라집니다.
스케줄 종류에는 BlockingScheduler, BackgroundScheduler 가 있다.
BlockingScheduler는 단일 수행에, BackgroundScheduler는 다중 수행에 사용된다.
# apschedule 설치
> pip install apschedule
# 사용방법
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.base import JobLookupError
import time
def job_1():
print("Job1 실행: ", "| [time] "
, str(time.localtime().tm_hour) + ":"
+ str(time.localtime().tm_min) + ":"
+ str(time.localtime().tm_sec))
def job_2():
print("Job2 실행: ", "| [time] "
, str(time.localtime().tm_hour) + ":"
+ str(time.localtime().tm_min) + ":"
+ str(time.localtime().tm_sec))
# BackgroundScheduler을 사용하면 start를 먼저 하고 add_job을 이용해 수행할 것을 등록해줍니다.
sched = BackgroundScheduler()
sched.start()
# interval - 매 3초마다 실행
sched.add_job(job, 'interval', seconds=3, id="test_2")
# cron 사용 - 매 5초마다 job 실행
# : id 는 고유 수행번호로 겹치면 수행되지 않습니다.
# 만약 겹치면 다음의 에러 발생 => 'Job identifier (test_1) conflicts with an existing job'
sched.add_job(job_1, 'cron', second='*/5', id="test_1")
# cron 으로 하는 경우는 다음과 같이 파라미터를 상황에 따라 여러개 넣어도 됩니다.
# 매시간 59분 10초에 실행한다는 의미.
sched.add_job(job_2, 'cron', minute="59", second='10', id="test_10")
while True:
print("Running main process...............")
time.sleep(1)
참고
https://pypi.org/project/APScheduler/3.2.0/
'programming language > Dev' 카테고리의 다른 글
[MySQL] SSH 이용해서 sql파일 import 또는 export 하기 / Import and Export (*.sql file) via SSH (0) | 2022.01.25 |
---|---|
[MySQL] MySQL Workbench에서 Table DDL create 스크립트 확인 / How to get a table creation script in MySQL Workbench? (0) | 2022.01.07 |
[Nginx] Nginx 이해하기 (0) | 2022.01.05 |
[Java] jenv를 활용하여 버전별 JDK 사용하기 (0) | 2021.12.02 |
[Java] JDK 제거하는 법 (0) | 2020.09.29 |
댓글 개