반응형
APScheduler 란?
APScheduler는 Advanced Python Scheduler의 줄임말로 스케줄을 예약하여 실행할 수 있도록 돕는 라이브러리이다.
예를 들어 특정 시간에 실행시키고 싶은 코드가 있다거나, 일정 간격으로 수행해야 하는 코드가 있다면 이 라이브러리를 유용하게 사용할 수 있다.
특히 기존 스케줄러와 가장 큰 차이점이자 장점은 while과 같은 무한루프를 돌리지 않아도 코드를 비동기적으로 실행시킬 수 있다는 점이다!
실습
아래 실습 코드를 통해 사용법을 살펴보자
from apscheduler.schedulers.background import BackgroundScheduler
from flask import Flask
#-----
#스케줄 실행 코드
def scheduler():
print("Scheduler is alive!")
schedule = BackgroundScheduler(daemon=True, timezone='Asia/Seoul')
schedule.add_job(scheduler, 'interval', seconds=3)
schedule.start()
#-----
#-----
#flask 서버 실행 코드
app = Flask(__name__)
@app.route("/", methods=["GET"])
def ping():
return "뀽뀽뀽"
if __name__ == '__main__':
app.debug = True
app.run()
#-----
먼저 스케줄을 사용하기 위해 라이브러리를 import한다
# apscheduler 설치 필수!
from apscheduler.schedulers.background import BackgroundScheduler
# flask 서버도 함께 돌려보자!
from flask import Flask
그다음 스케줄로 실행할 함수와 스케줄을 설정하는 코드를 작성해보자
#스케줄 실행 코드
def scheduler():
# 출력할 문구
print("Scheduler is alive!")
# timezone을 설정해두지 않으면 경고문구가 뜰 수 있다!
# BackgroundScheduler을 통해 schedule 인스턴스를 생성한다.
schedule = BackgroundScheduler(daemon=True, timezone='Asia/Seoul')
# 추가하고 싶은 작업을 add_job 매서드를 통해 설정한다.
# 이 코드는 2초 간격으로 실행하라는 의미이다
schedule.add_job(scheduler, 'interval', seconds=2)
# 스케줄을 start()로 호출한다
schedule.start()
flask 서버를 열어 스케줄 실행 중에도 다른 요청 작업이 가능한지 알기 위해 다음 코드를 추가한다
#flask 서버 실행 코드
app = Flask(__name__)
# '/' endpoint로 요청이 들어오면 "뀽뀽뀽"을 반환한다
@app.route("/", methods=["GET"])
def ping():
return "뀽뀽뀽"
if __name__ == '__main__':
app.debug = True
app.run()
결과
최종적으로 이 파이썬 파일을 실행하면 어떤 일이 일어날까?
Scheduler is alive!
127.0.0.1 - - [18/Jan/2022 18:51:38] "GET / HTTP/1.1" 200 -
Scheduler is alive!
127.0.0.1 - - [18/Jan/2022 18:51:40] "GET / HTTP/1.1" 200 -
Scheduler is alive!
Scheduler is alive!
127.0.0.1 - - [18/Jan/2022 18:51:42] "GET / HTTP/1.1" 200 -
Scheduler is alive!
Scheduler is alive!
Scheduler is alive!
127.0.0.1 - - [18/Jan/2022 18:51:47] "GET / HTTP/1.1" 200 -
Scheduler is alive!
Scheduler is alive!
Scheduler is alive!
Scheduler is alive!
Scheduler is alive!
실제 터미널에서 실행한 출력 값이다.
스케줄은 계속 반복되지만 그 사이에 flask서버를 통해 다른 요청을 받을 수 있는 걸 볼 수 있다.
이처럼 비동기적으로 작업을 수행해야 할 때 APScheduler을 활용하면 원하는 작업을 수행할 수 있다.
반응형
'나는 이렇게 학습한다 > Library' 카테고리의 다른 글
SQLAlchemy, ‘PasswordType’으로 손쉽게 암호화하자 (0) | 2022.04.12 |
---|---|
Poetry로 프로젝트 패키지를 관리하자 (0) | 2022.04.11 |
pre-commit 에서 ‘flake8’ 과 ‘black’ 커스텀 문제 (0) | 2022.04.07 |
pre-commit 을 이용해 commit 전 코드 체크를 자동화하자. (0) | 2022.04.06 |
Linter 와 Formatter 를 사용해서 깔끔하게 코딩하자 (0) | 2022.01.14 |