"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > تشغيل وظيفة Cron في Django باستخدام Celery وDocker

تشغيل وظيفة Cron في Django باستخدام Celery وDocker

تم النشر بتاريخ 2024-09-01
تصفح:483

Running a Cron Job in Django Using Celery and Docker

مقدمة إلى وظائف كرون

مهمة cron هي مهمة مجدولة يتم تشغيلها تلقائيًا على فترات زمنية محددة. تعتبر هذه المهام مفيدة لأتمتة العمليات المتكررة مثل إرسال رسائل تذكير عبر البريد الإلكتروني أو إنشاء التقارير أو تنظيف قواعد البيانات. في مشروع Django، يمكن إعداد وظائف cron باستخدام أدوات مثل Celery، مما يجعل جدولة المهام وإدارتها سهلة وفعالة.

إعداد مشروع جانغو الخاص بك

لنبدأ بإنشاء مشروع Django، وتثبيت الحزم اللازمة، ثم تخزين المشروع في حاوية باستخدام Docker.

أنشئ بيئة افتراضية وقم بتثبيت Django وDRF

  • افتح جهازك وانتقل إلى دليل المشروع الخاص بك.
  • إنشاء وتفعيل بيئة افتراضية:
python -m venv myenv
source myenv/bin/activate  # On Windows, use myenv\Scripts\activate
  • تثبيت إطار عمل Django وDjango REST:
pip install django djangorestframework

إنشاء مشروع وتطبيق Django

  • إنشاء مشروع جانغو جديد:
django-admin startproject myproject
cd myproject
  • إنشاء تطبيق Django جديد:
python manage.py startapp myapp
  • أضف التطبيق إلى settings.py الخاص بك:
# myproject/settings.py

INSTALLED_APPS = [
    ...
    'myapp',
    'rest_framework',
]

تثبيت الكرفس وRedis

  • تثبيت الكرفس وRedis:
pip install celery redis
  • قم بإعداد Celery في مشروعك عن طريق إنشاء ملف celery.py:
# 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'
  • تعديل init.py لتحميل Celery مع Django:
# myproject/__init__.py
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)
  • تكوين الكرفس في settings.py:
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.")

إنشاء تكوين عامل ميناء

  • أنشئ ملف Dockerfile لـ Django الخاص بك لواجهة برمجة التطبيقات (المسمى: Dockerfile.myapi):
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"]
  • قم بإنشاء ملف Dockerfile للكرفس (المسمى: Dockerfile.myjob)
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"]
  • قم بإنشاء ملف require.txt لسرد تبعياتك:
Django==4.2
djangorestframework==3.14.0
celery==5.3.1
redis==5.0.0
  • قم بإنشاء ملف docker-compose.yml لإدارة الخدمات:
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
  • قم بإنشاء ملف .env وأضف قيمة عنوان URL لـ Redis إليه:
REDIS_URL=

بناء وتشغيل حاويات Docker

  • إنشاء صور Docker وتشغيلها:
docker-compose up --build

سيؤدي هذا إلى بدء تشغيل تطبيق Django الخاص بك، جنبًا إلى جنب مع عامل Celery وجدولة إيقاعات Celery.

التحقق من وظيفة كرون

يجب الآن تشغيل مهام الكرفس الخاصة بك وفقًا للجدول الزمني الذي حددته. يمكنك التحقق من السجلات في الوقت المحدد للتأكد من تنفيذ المهمة.

خاتمة

يوفر تشغيل وظائف cron في Django باستخدام Celery وDocker وRedis حلاً قويًا وقابلاً للتطوير لإدارة مهام الخلفية. يضمن Docker تشغيل تطبيقك باستمرار عبر بيئات مختلفة، مما يجعل النشر أسهل. باتباع الخطوات المذكورة أعلاه، يمكنك أتمتة المهام بكفاءة وإدارة مشروع Django الخاص بك بسهولة.

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/engrmark/running-a-cron-job-in-django-using-celery-and-docker-238d?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang@163 .com لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3