Rumah >pembangunan bahagian belakang >Tutorial Python >Menjalankan Kerja Cron dalam Django Menggunakan Saderi dan Docker
Cron job ialah tugas berjadual yang berjalan secara automatik pada selang waktu tertentu. Tugasan ini berguna untuk mengautomasikan operasi berulang seperti menghantar e-mel peringatan, menjana laporan atau membersihkan pangkalan data. Dalam projek Django, tugas cron boleh disediakan menggunakan alatan seperti Celery, yang menjadikan penjadualan dan pengurusan tugasan mudah dan cekap.
Mari mulakan dengan mencipta projek Django, memasang pakej yang diperlukan, dan kemudian memasukkan projek itu dengan 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
Dalam apl Django anda, tentukan tugas dalam 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
Ini akan memulakan aplikasi Django anda, bersama-sama dengan pekerja Saderi dan penjadual rentak Saderi.
Tugas Saderi anda kini harus dijalankan mengikut jadual yang anda tetapkan. Anda boleh menyemak log pada masa yang ditetapkan untuk mengesahkan bahawa tugasan sedang dilaksanakan.
Menjalankan kerja cron di Django menggunakan Celery, Docker dan Redis menawarkan penyelesaian yang teguh dan berskala untuk mengurus tugas latar belakang. Docker memastikan aplikasi anda berjalan secara konsisten merentasi persekitaran yang berbeza, menjadikan penggunaan lebih mudah. Dengan mengikut langkah di atas, anda boleh mengautomasikan tugas dengan cekap dan mengurus projek Django anda dengan mudah.
Atas ialah kandungan terperinci Menjalankan Kerja Cron dalam Django Menggunakan Saderi dan Docker. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!