00 개요
- 목적: LSF 관련 프로그램 작성 시 이 클래스를 import 하는데 관련해서 정리하고자 함
- BackgroundScheduler 클래스는 APScheduler (A Python Scheduler) 라이브러리의 한 구성 요소로, 백그라운드에서 스케줄링된 작업을 실행 가능케함
- APScheduler는 Python에서 작업을 스케줄링하기 윟나 라이브러리로, cron 스타일의 작업, 반복 작업, 특정 시간에 실행될 작업 등을 쉽게 정의하고 관리할 수 있게 도와줌
01 APScheduler 개요
- APScheduler는 3가지 주요 구성 요소로 이루어짐
1. Schedulers : 작업을 스케줄링하고 관리하는 역할을 함
2. Job Stores: 작업 데이터를 저장하고 지속성(persistence) 제공함
3. Executors: 작업을 실제로 실행하는 역할을 함
02 BackgroundScheduler
- BackgroundScheduler는 스케줄러 중 하나로, 별도의 백그라운드 스레드에서 작업을 실행함
- 이를 통해 메인 스레드가 차단되지 않으면서도 주기적인 작업 수행 가능
1. 주요 기능
- 백그라운드 실행: 작업을 백그라운드에서 실행하므로 메인 프로그램의 흐름을 방해하지 않음
- 유연한 작업 스케줄링: 날짜와 시간, 주기, cron 표현식 등을 사용하여 작업을 유연하게 스케줄링 가능
- 다양한 Job Store 지원: 메모리, 데이터베이스 등 다양한 저장소에 작업 저장 가능
- 다양한 Executor 지원: 기본 스레드 풀 외에도 프로세스 풀 등 다양한 실행 방법 지원
2. 사용 예시
rom apscheduler.schedulers.background import BackgroundScheduler
from datetime import datetime
import time
def job_function():
print(f"작업이 실행되었습니다: {datetime.now()}")
# BackgroundScheduler 인스턴스 생성
scheduler = BackgroundScheduler()
# 작업 추가: 3초마다 job_function 실행
scheduler.add_job(job_function, 'interval', seconds=3)
# 스케줄러 시작
scheduler.start()
try:
# 메인 프로그램은 계속 실행 중
while True:
time.sleep(1)
except (KeyboardInterrupt, SystemExit):
# 종료 시 스케줄러도 종료
scheduler.shutdown()
print("스케줄러가 종료되었습니다.")
3. 주요 메소드
- add_job(): 새로운 작업을 스케줄링
- 예: scheduler.add_job(job_function, 'interval', seconds=3)은 3초마다 job_function을 실행
- start(): 스케줄러를 시작하여 작업을 실행할 준비
- shutdown(): 스케줄러를 종료하고 모든 작업 실행을 중단
- pause() / resume(): 스케줄러의 실행을 일시 중지하거나 재개
- remove_job(): 스케줄링된 특정 작업을 제거
4. Job Trigger
- 작업을 언제 실행할지 결정하는 여러 가지 트리거를 사용 가능
- date: 특정 날짜와 시간에 작업을 실행
- interval: 일정 간격으로 작업을 실행
- cron: cron 표현식을 사용하여 복잡한 스케줄을 정의
- 예시)
scheduler.add_job(job_function, 'date', run_date='2024-07-05 12:00:00') # date trigger
scheduler.add_job(job_function, 'interval', hours=1) # interval trigger
scheduler.add_job(job_function, 'cron', day_of_week='mon-fri', hour=17, minute=30) # cron trigger
3. 결론
- BackgroundScheduler는 APScheduler의 강력한 구성 요소로, 백그라운드에서 주기적인 작업을 실행할 수 있도록 도와줌
- 이를 통해 메인 프로그램의 흐름을 방해하지 않고 다양한 작업을 유연하게 스케줄링 가능
- 다양한 트리거와 저장소, 실행 방식을 지원하여 복잡한 스케줄링 요구사항도 쉽게 처리 가능
'Python' 카테고리의 다른 글
Recursion Limit (재귀 호출 제한) (0) | 2024.07.10 |
---|---|
importlib (파이썬 라이브러리) (0) | 2024.07.05 |
faulthandler (파이썬 추적 백업 모듈) (0) | 2024.07.05 |
@classmethod, @staticmethod (파이썬 매서드 데코레이터) (1) | 2024.07.01 |
클래스, 객체, 속성, 메서드, 생성자, 인스턴스란 (파이썬 용어) (0) | 2024.06.29 |