크론 작업은 지정된 간격으로 자동으로 실행되는 예약된 작업입니다. 이러한 작업은 알림 이메일 보내기, 보고서 생성 또는 데이터베이스 정리와 같은 반복적인 작업을 자동화하는 데 유용합니다. Django 프로젝트에서는 Celery와 같은 도구를 사용하여 크론 작업을 설정할 수 있어 작업 예약 및 관리가 쉽고 효율적입니다.
먼저 Django 프로젝트를 생성하고 필요한 패키지를 설치한 다음 Docker를 사용하여 프로젝트를 컨테이너화해 보겠습니다.
python -m venv myenv source myenv/bin/activate # On Windows, use myenv\Scripts\activate
pip install django djangorestframework
django-admin startproject myproject cd myproject
python manage.py startapp myapp
# myproject/settings.py INSTALLED_APPS = [ ... 'myapp', 'rest_framework', ]
pip install celery redis
# myproject/celery.py from __future__ import absolute_import, unicode_literals import os from celery import Celery os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') app = Celery('myproject') app.config_from_object('django.conf:settings', namespace='CELERY') app.autodiscover_tasks() app.conf.beat_schedule = { 'run-this-task-every-day': { 'task': 'myapp.tasks.my_scheduled_task', 'schedule': crontab(minute="00", hour="7"), # Executes every day at 7 AM }, } app.conf.timezone = 'UTC'
# myproject/__init__.py from __future__ import absolute_import, unicode_literals from .celery import app as celery_app __all__ = ('celery_app',)
CELERY_BROKER_URL = os.environ.get('REDIS_URL') CELERY_RESULT_BACKEND = os.environ.get('REDIS_URL') CELERY_ACCEPT_CONTENT = ['json'] CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER = 'json' CELERY_TIMEZONE = 'UTC' CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP = True
Django 앱의tasks.py에서 작업을 정의하세요.
# myapp/tasks.py from celery import shared_task @shared_task def my_scheduled_task(): print("This task runs every every day.")
FROM python:3.8-alpine3.15 ENV PYTHONUNBUFFERED=1 ENV PYTHONDONTWRITEBYTECODE=1 WORKDIR /app COPY requirements.txt /app RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 9000 CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:8000", "myproject.wsgi:application"]
FROM python:3.8-alpine3.15 ENV PYTHONUNBUFFERED=1 ENV PYTHONDONTWRITEBYTECODE=1 WORKDIR /app COPY requirements.txt /app RUN pip install --no-cache-dir -r requirements.txt COPY . /app CMD ["celery", "-A", "myproject", "worker", "--loglevel=info", "--concurrency=4", "-E", "-B"]
Django==4.2 djangorestframework==3.14.0 celery==5.3.1 redis==5.0.0
services: app: build: context: . dockerfile: Dockerfile.myapi container_name: myapp_api ports: - 7000:7000 env_file: - .env celery: build: context: . dockerfile: Dockerfile.myjob container_name: myapp_job depends_on: - app env_file: - .env
REDIS_URL=<your_redis_url>
docker-compose up --build
이렇게 하면 Celery 작업자 및 Celery 비트 스케줄러와 함께 Django 애플리케이션이 시작됩니다.
이제 Celery 작업이 정의한 일정에 따라 실행되어야 합니다. 지정된 시간에 로그를 확인하여 작업이 실행되고 있는지 확인할 수 있습니다.
Celery, Docker 및 Redis를 사용하여 Django에서 cron 작업을 실행하면 백그라운드 작업 관리를 위한 강력하고 확장 가능한 솔루션이 제공됩니다. Docker는 애플리케이션이 다양한 환경에서 일관되게 실행되도록 보장하여 배포를 더 쉽게 만듭니다. 위의 단계를 따르면 작업을 효율적으로 자동화하고 Django 프로젝트를 쉽게 관리할 수 있습니다.
위 내용은 Celery와 Docker를 사용하여 Django에서 Cron 작업 실행의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!