تخطَّ إلى المحتوى

٢١ يوليو ٢٠٢٦

Django Tasks الجديد ضد Celery: أيهما تستخدم للمهام الخلفية؟

شارك المقال:

بدءًا من Django 6، صار فيه حل مدمج بالإطار نفسه لتشغيل مهام خارج دورة الطلب/الاستجابة — بلا حاجة لتثبيت أي مكتبة خارجية. لسنين طويلة، Celery كان الخيار شبه الوحيد لهذا الغرض بمشاريع Django. فهل صار Celery غير ضروري؟ لنقارن.

Django Tasks — مدمج وبسيط

سطر واحد يحوّل دالة عادية لمهمة قابلة للجدولة:

from django.tasks import task

@task
def send_welcome_email(user_email):
    # ... إرسال البريد ...
    pass

# من أي مكان بالكود:
send_welcome_email.enqueue(user_email=user.email)

بلا broker خارجي، بلا مكتبة إضافية — الإعداد الافتراضي (ImmediateBackend) يشتغل فورًا من أول تجربة محلية. لكن هذا بالضبط قيده الأكبر: ImmediateBackend تُنفّذ المهمة بشكل متزامن ضمن نفس الطلب، مناسبة للتطوير فقط — الإنتاج الحقيقي يحتاج خلفية طرف ثالث توفّر عمّالًا (workers) مستقلّين فعليًا.

Celery — الخيار الناضج تقليديًا

# tasks.py
from celery import shared_task

@shared_task
def send_welcome_email(user_email):
    # ... إرسال البريد ...
    pass

# من أي مكان بالكود:
send_welcome_email.delay(user_email=user.email)

يحتاج broker منفصل (Redis أو RabbitMQ) لتمرير المهام لعمّال مستقلّين، وعملية worker تشتغل بشكل منفصل عن خادم الويب. مقابل هذا التعقيد الإضافي، تحصل على نظام ناضج ومُختبَر على نطاق واسع، مع Celery Beat لجدولة مهام دورية (cron)، وأداة Flower لمراقبة الطابور مباشرة.

جدول المقارنة

المعيارDjango Tasks (مدمج)Celery
التثبيتمدمج، بلا حزمة إضافية للتعريف الأساسيمكتبة منفصلة + broker خارجي (Redis/RabbitMQ)
مهام مجدولة دوريًاغير مدعومة بالإطار الأساسي حاليًامدعومة رسميًا عبر Celery Beat
خلفية إنتاج حقيقيةتحتاج حزمة طرف ثالث توفّر عمّالًاناضجة ومختبرة على نطاق واسع فعليًا
مراقبة الطابورغير مدمجةمتوفّرة عبر Flower وأدوات مشابهة
منحنى التعلّمبسيط جدًا، سطر @task وenqueue()يحتاج فهم broker + worker + إعدادات

متى تختار كل واحد؟

القاعدة العملية: مشروع جديد بمهام بسيطة غير مجدولة (بريد ترحيب، إشعار)؟ ابدأ بـ Django Tasks المدمج وقلّل التبعيات. مشروع يحتاج جدولة دورية أو حمل عمل ثقيل موزّع، أو already يشتغل على Celery وتمام؟ ما فيه داعي تهاجر — Celery ما زال الخيار الأنضج لهذه الحالات.

  • ابدأ بـ Django Tasks إن كان مشروعك صغيرًا أو متوسطًا، والمهام بسيطة وغير مجدولة دوريًا، وتبي أقل تبعيات ممكنة.
  • استخدم Celery إن احتجت مهامًا مجدولة (cron)، أو حمل عمل ثقيل على عدّة عمّال، أو مراقبة جاهزة للطابور، أو كان مشروعك already مبنيًا عليه.

الخلاصة

Django Tasks Framework مش بديل كامل لـ Celery حتى الآن — هو حل مدمج للحالات البسيطة يقلّل التبعيات بمشاريع جديدة، بينما Celery يبقى الخيار الأنضج للمهام المجدولة دوريًا وحمل العمل الثقيل بالإنتاج. الاثنان يخدمان نفس الهدف العام (تحرير الطلب من الانتظار)، لكن بمستوى نضج ونطاق مختلف تمامًا.

ابدأ مسار Django الكامل بالعربي — من أول نموذج لحد المهام الخلفية والنشر الحقيقي.

📚 مصادر رسمية للتعمّق: التوثيق الرسمي لـ Django

الأسئلة الشائعة

هل Django Tasks Framework بديل كامل لـ Celery؟

لأ، مو بديل كامل حاليًا. بيغطّي حالات بسيطة (إرسال بريد، إشعار، معالجة صورة) بلا تبعية خارجية، لكن ما بيدعم مهام مجدولة دوريًا (cron) بشكل مدمج، وبيحتاج خلفية طرف ثالث حقيقية عشان يشتغل فعليًا بالخلفية بالإنتاج — Celery أنضج بكتير لحمل عمل ثقيل أو جدولة دورية.

شو أسهل بالإعداد؟

Django Tasks أسهل بكتير للبداية — مدمج بالإطار، سطر @task وenqueue() وخلاص، بلا broker خارجي تركّبه وتشغّله. Celery يحتاج تثبيت مكتبة منفصلة + broker (Redis أو RabbitMQ) + تشغيل عملية worker منفصلة عن الخادم.

متى أحتاج Celery رغم وجود Tasks Framework الجديد؟

لما تحتاج مهام مجدولة دوريًا (تقرير يومي، تنظيف بيانات أسبوعي) عبر Celery Beat، أو حمل عمل ثقيل موزّع على عدّة عمّال (workers) بمراقبة جاهزة (Flower)، أو ببساطة مشروع كبير already مبني على Celery ويشتغل تمام.

اقرأ أيضًا

تصفّح كل المقالات في المدوّنة، أو ابدأ التعلّم من المسارات و خرائط الطريق.