개인 플젝 뚜따/날씨 알림이 서비스

파이썬 스케쥴링: 외부 도구 크론탭 vs. 파이썬 내부 스케줄링

curiousKidd 2025. 1. 3. 00:21
반응형

특정 작업을 주기적으로 실행해야 할 때, 파이썬에서는 내부 스케줄링 라이브러리(schedule, APScheduler)를 사용할 수 있고, 외부 도구(예: 크론탭)를 활용할 수도 있습니다.
이 글에서는 두 방식의 장단점과 적합한 사용 사례를 비교하고, CPU 및 메모리 사용량 테스트 방법까지 정리하였습니다.


1. 방법 소개

1.1 크론탭 (Cron)

크론탭은 리눅스/유닉스 기반 시스템에서 작업을 주기적으로 실행하기 위한 스케줄링 도구입니다.

설정 방법

  1. 터미널에서 크론탭 편집:
    crontab -e
  2. 실행 주기를 설정:
    0 22 * * * python3 /path/to/weather_bot.py
    • 위 예시는 매일 저녁 10시에 weather_bot.py를 실행.

1.2 파이썬 내부 스케줄링

파이썬에서는 schedule이나 APScheduler 라이브러리를 사용해 코드 내에서 작업을 예약할 수 있습니다.

schedule 예제:

import schedule
import time

def job():
    print("작업 실행 중...")

schedule.every().day.at("22:00").do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

APScheduler 예제:

from apscheduler.schedulers.blocking import BlockingScheduler

def job():
    print("작업 실행 중...")

scheduler = BlockingScheduler()
scheduler.add_job(job, 'cron', hour=22, minute=0)
scheduler.start()

2. 크론탭 vs. 파이썬 내부 스케줄링 비교

항목 크론탭 파이썬 내부 스케줄링
설치 및 설정 리눅스 기본 내장 도구, 간단한 설정 가능 별도의 라이브러리 설치 필요 (schedule 등)
복잡한 스케줄 지원 크론식 표현으로 유연한 주기 설정 가능 복잡한 설정은 APScheduler에서 지원
의존성 운영체제에 의존 Python 환경 내에서 작동
CPU/메모리 사용량 프로세스 실행 시점만 CPU 사용 스케줄러 유지로 약간의 자원 사용
실행 상태 관리 별도의 로그 설정 필요 실행 상태를 Python 코드에서 바로 관리 가능
적합한 환경 서버 환경 또는 단순 반복 작업 독립적인 파이썬 애플리케이션 내

3. 적합한 사용 사례

크론탭을 사용할 때:

  • 단순 반복 작업:
    • 예: 매일 특정 시간에 데이터 백업 실행.
  • 서버 환경에서 독립적인 작업 실행:
    • 스크립트가 독립적으로 실행되며, Python 환경 외의 작업도 포함될 때.
  • 리소스 효율성이 중요할 때:
    • CPU 및 메모리 사용을 최소화하려는 경우.

파이썬 내부 스케줄링을 사용할 때:

  • 복잡한 스케줄:
    • 예: 다양한 작업 주기(인터벌, 특정 날짜/시간) 또는 동적으로 변경해야 하는 경우.
  • 상태 관리가 중요한 경우:
    • 작업 실행 상태를 코드에서 직접 확인 및 조정.
  • Python 애플리케이션 내부 통합:
    • 스케줄링 로직과 작업이 애플리케이션 코드에 밀접하게 통합될 때.

4. CPU 및 메모리 사용량 비교 테스트

테스트 계획

  1. 테스트 환경 설정:
    • 동일한 스크립트를 크론탭과 파이썬 내부 스케줄링 방식으로 각각 실행.
    • 작업: 1분마다 로그를 출력.
  2. 자원 사용량 측정:
    • Linux 명령어: top, htop, 또는 ps.
    • Python: psutil 라이브러리 사용.
  3. 테스트 코드:
  • psutil을 활용한 CPU/메모리 측정 코드
import psutil
import time

def monitor_resources():
    process = psutil.Process()
    while True:
        cpu = process.cpu_percent(interval=1)
        memory = process.memory_info().rss / 1024 / 1024  # MB 단위
        print(f"CPU 사용량: {cpu}%, 메모리 사용량: {memory:.2f}MB")
        time.sleep(10)

# monitor_resources()를 별도의 스레드나 프로세스에서 실행
  1. 결과 분석:
    • 크론탭: 작업 실행 시점만 CPU/메모리 사용.
    • 파이썬 내부 스케줄링: 스케줄러 실행 상태 유지로 약간의 추가 자원 사용.

5. 결론

  • 간단한 작업 및 서버 기반 실행: 크론탭이 적합.
  • 복잡한 로직 및 Python 코드와의 통합: 파이썬 내부 스케줄링이 적합.
  • 리소스 제한: 크론탭이 유리.
  • 동적인 작업 스케줄 관리: APScheduler 추천.

추가 팁

  • 크론탭은 서버 관리에 익숙한 경우 가장 가볍고 효율적인 옵션입니다.
  • 파이썬 내부 스케줄링은 코드 통합이 필요하거나 동적으로 스케줄을 변경해야 하는 경우 적합합니다.
반응형