مهمة cron هي مهمة مجدولة يتم تشغيلها تلقائيًا على فترات زمنية محددة. تعتبر هذه المهام مفيدة لأتمتة العمليات المتكررة مثل إرسال رسائل تذكير عبر البريد الإلكتروني أو إنشاء التقارير أو تنظيف قواعد البيانات. في مشروع Django، يمكن إعداد وظائف cron باستخدام أدوات مثل 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=
docker-compose up --build
سيؤدي هذا إلى بدء تشغيل تطبيق Django الخاص بك، جنبًا إلى جنب مع عامل Celery وجدولة إيقاعات Celery.
يجب الآن تشغيل مهام الكرفس الخاصة بك وفقًا للجدول الزمني الذي حددته. يمكنك التحقق من السجلات في الوقت المحدد للتأكد من تنفيذ المهمة.
يوفر تشغيل وظائف cron في Django باستخدام Celery وDocker وRedis حلاً قويًا وقابلاً للتطوير لإدارة مهام الخلفية. يضمن Docker تشغيل تطبيقك باستمرار عبر بيئات مختلفة، مما يجعل النشر أسهل. باتباع الخطوات المذكورة أعلاه، يمكنك أتمتة المهام بكفاءة وإدارة مشروع Django الخاص بك بسهولة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3