본문 바로가기
Python

BackgroundScheduler (APScheduler 라이브러리의 클래스)

by yororing 2024. 7. 5.

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의 강력한 구성 요소로, 백그라운드에서 주기적인 작업을 실행할 수 있도록 도와줌
  • 이를 통해 메인 프로그램의 흐름을 방해하지 않고 다양한 작업을 유연하게 스케줄링 가능
  • 다양한 트리거와 저장소, 실행 방식을 지원하여 복잡한 스케줄링 요구사항도 쉽게 처리 가능