جدولة المهام المتعددة غير المتزامنة في Django باستخدام Celery

قد تصبح إدارة المهام في تطبيق ويب معقدة، خاصة عندما تحتاج إلى تنفيذ عمليات تستغرق وقتًا طويلاً بشكل غير متزامن. يمكن توسيع إطار عمل الويب الشهير Django باستخدام Celery للتعامل مع المهام غير المتزامنة بكفاءة. في منشور المدونة هذا، سنستكشف كيفية إعداد جدولة المهام الدورية باستخدام Celery في تطبيق Django. يتيح هذا لتطبيقك تشغيل مهام الخلفية على فترات زمنية محددة وتخفيف معالجة المهام من سلاسل التطبيق الرئيسية.
1. قم بتثبيت Celery وDjango Celery Beat
تبدأ الرحلة بتثبيت Celery وdjango-celery-beat. وهما مكونان أساسيان لجدولة المهام وتنفيذها في Django. ويمكنك تثبيتهما باستخدام pip:
pip install celery django-celery-beat
2. تكوين الكرفس
بعد تثبيت Celery، تحتاج إلى تكوينه للعمل مع تطبيق Django الخاص بك. ابدأ بإنشاء ملف باسم celery.py في الدليل الرئيسي لمشروعك. سيقوم هذا الملف بتهيئة Celery وربطه بإعدادات Django.
from celery import Celery import os # Set the default Django settings module for the 'celery' program. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project_name.settings') app = Celery('your_project_name') # Using a string here means the worker will not have to serialize # the configuration object to child processes. app.config_from_object('django.conf:settings', namespace='CELERY') # Load task modules from all registered Django apps. app.autodiscover_tasks()
للتأكد من تحميل هذا التكوين عند بدء تشغيل Django، قم باستيراد تطبيق Celery الخاص بك في your_project_name/__init__.py ملف:
from .celery import app as celery_app __all__ = ('celery_app',)
3. تحديث إعدادات Django
بعد ذلك، قم بدمج Celery مع إعدادات Django الخاصة بك عن طريق تحديث settings.py يتضمن ذلك تحديد الوسيط الخاص بك وواجهة النتائج الخلفية، والتي يمكن أن تكون RabbitMQ أو Redis.
CELERY_BROKER_URL = 'redis://localhost:6379/0' # or 'amqp://localhost//' for RabbitMQ CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' CELERY_TIMEZONE = 'UTC' from celery.schedules import crontab CELERY_BEAT_SCHEDULE = { 'task-name': { 'task': 'myapp.tasks.task_function', 'schedule': crontab(minute=0, hour=0), # Executes daily at midnight }, }
4. حدد مهمتك
الآن، حان الوقت لتحديد المهام التي يجب أن تقوم بها. قم بإنشاء tasks.py الملف في تطبيق Django الخاص بك (على سبيل المثال، myapp ) وأضف وظيفة المهمة الخاصة بك.
from celery import shared_task @shared_task def task_function(): # Logic for your asynchronous, multithreaded task print("Task is executing")
هنا، @مهمة مشتركة هو ديكور مقدم من Celery يضع علامة على أن الوظيفة هي مهمة قابلة للاستدعاء.
5. قم بتشغيل Celery Worker واخفق
أخيرًا، تحتاج إلى تشغيل برنامج Celery worker والبدء في معالجة المهام وجدولتها وفقًا لتكوينك.
# Start Celery Worker celery -A your_project_name worker -l info # Start Celery Beat celery -A your_project_name beat -l info
تعمل هذه الأوامر على تشغيل العامل لمعالجة المهام غير المتزامنة وعملية الضرب لإدارة المهام الدورية. تأكد من تشغيل وسيط الرسائل الخاص بك مثل Redis أو RabbitMQ قبل تنفيذ هذه الأوامر.
باتباع هذه الخطوات، تكون قد جهزت تطبيق Django الخاص بك للتعامل بكفاءة مع المهام غير المتزامنة الدورية، مما يعزز أداء تطبيقك واستجابته. Celery هي أداة قوية، ومع هذا الإعداد، تكون مستعدًا لاستكشاف أفكار معالجة المهام الأكثر تعقيدًا.
إخلاء مسؤولية إعادة النشر: هذا المحتوى محمي بحقوق الطبع والنشر وجميع الحقوق محفوظة للمؤلف. نرحب بإعادة نشر أو مشاركة هذه الصفحة، ولكن يُرجى التأكد من تقديم إشارة واضحة إلى المصدر الأصلي مع رابط يعود إلى هذه الصفحة. شكرًا لاحترامكم لمحتوانا!
هل كانت هذه المقالة مفيدة؟
وجد 196 من أصل 196 هذا مفيدًا
John Tanner
المؤسسأنا مطور برامج ذو مهارات عالية ولدي خبرة تزيد عن 20 عامًا في تطوير الأنظمة الشاملة عبر المنصات. أخصص في تصميم وإدارة البنية التحتية للمشاريع الكبيرة وتبسيط الأنظمة المعقدة. تمتد خبرتي إلى تطوير بايثون وراست وDjango. لدي معرفة عميقة في تقنيات البلوكشين، والذكاء الاصطناعي، والأنظمة ذات التوافر العالي، واستخراج البيانات من التطبيقات والويب، وتطوير واجهات برمجة التطبيقات، وتحسين قواعد البيانات، وتهيئة المشاريع في الحاويات، ونشرها في بيئات الإنتاج.
اتصال John Tanner