반응형
특정 작업을 주기적으로 실행해야 할 때, 파이썬에서는 내부 스케줄링 라이브러리(schedule
, APScheduler
)를 사용할 수 있고, 외부 도구(예: 크론탭)를 활용할 수도 있습니다.
이 글에서는 두 방식의 장단점과 적합한 사용 사례를 비교하고, CPU 및 메모리 사용량 테스트 방법까지 정리하였습니다.
1. 방법 소개
1.1 크론탭 (Cron)
크론탭은 리눅스/유닉스 기반 시스템에서 작업을 주기적으로 실행하기 위한 스케줄링 도구입니다.
설정 방법
- 터미널에서 크론탭 편집:
crontab -e
- 실행 주기를 설정:
0 22 * * * python3 /path/to/weather_bot.py
- 위 예시는 매일 저녁 10시에
weather_bot.py
를 실행.
- 위 예시는 매일 저녁 10시에
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분마다 로그를 출력.
- 자원 사용량 측정:
- Linux 명령어:
top
,htop
, 또는ps
. - Python:
psutil
라이브러리 사용.
- Linux 명령어:
- 테스트 코드:
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()를 별도의 스레드나 프로세스에서 실행
- 결과 분석:
- 크론탭: 작업 실행 시점만 CPU/메모리 사용.
- 파이썬 내부 스케줄링: 스케줄러 실행 상태 유지로 약간의 추가 자원 사용.
5. 결론
- 간단한 작업 및 서버 기반 실행: 크론탭이 적합.
- 복잡한 로직 및 Python 코드와의 통합: 파이썬 내부 스케줄링이 적합.
- 리소스 제한: 크론탭이 유리.
- 동적인 작업 스케줄 관리:
APScheduler
추천.
추가 팁
- 크론탭은 서버 관리에 익숙한 경우 가장 가볍고 효율적인 옵션입니다.
- 파이썬 내부 스케줄링은 코드 통합이 필요하거나 동적으로 스케줄을 변경해야 하는 경우 적합합니다.
반응형
'개인 플젝 뚜따 > 날씨 알림이 서비스' 카테고리의 다른 글
날씨 알림 서비스 프로젝트 소개 2탄 - docker-compose , ansible 활용 서버 배포 (0) | 2025.01.19 |
---|---|
날씨 알림 서비스 프로젝트 소개 1탄 - python3 , openai ai 활용기 (2) | 2025.01.01 |