ویژگی تصویر

زمان بندی وظایف در جنگو با Celery

  /  Django   /  زمان بندی وظایف در Django با Celery
بنر تبلیغاتی الف

در این بخش به بررسی نحوه زمان بندی وظایف در Django با Celery می پردازیم، در پروژه‌های وبی که با Django پیاده‌سازی می‌شوند، بسیاری از مواقع نیاز است وظایف خاصی در پس‌زمینه به صورت دوره‌ای یا با تأخیر اجرا شوند. به عنوان مثال، ارسال ایمیل‌های اطلاع‌رسانی، پردازش سنگین داده‌ها، یا حتی پاک‌سازی داده‌های قدیمی، نیازمند سیستمی است که این وظایف را به جای اجرای مستقیم در زمان درخواست کاربر، به زمان دیگری موکول کند. Celery یکی از محبوب‌ترین ابزارها برای اجرای این گونه وظایف پس‌زمینه است. این کتابخانه، به‌خصوص در کنار Django، امکان مدیریت وظایف زمان‌بندی شده و اجرای موازی آن‌ها را فراهم می‌کند.

Celery با استفاده از یک سیستم صف‌گذاری مانند RabbitMQ یا Redis کار می‌کند و این صف‌ها را به گونه‌ای مدیریت می‌کند که وظایف به صورت غیرهم‌زمان (asynchronous) و بدون تداخل در عملکرد اصلی وب‌سایت اجرا شوند. در این مقاله، به بررسی نحوه نصب و پیکربندی Celery در Django، تنظیمات لازم برای زمان‌بندی وظایف و اجرای آن‌ها می‌پردازیم. همچنین با مثال‌هایی کاربردی، نحوه استفاده از Celery برای اجرای وظایف زمان‌بندی شده را به صورت کامل آموزش خواهیم داد.

۱. نصب و پیکربندی Celery در Django

برای استفاده از Celery در پروژه Django خود، ابتدا باید این کتابخانه را به همراه یکی از سیستم‌های صف‌گذاری نصب کنید. Redis و RabbitMQ دو گزینه محبوب برای این کار هستند. در این آموزش، از Redis به عنوان سیستم صف استفاده خواهیم کرد.

گام‌های نصب:

  1. ابتدا با استفاده از pip، Celery و Redis را نصب کنید:
pip install celery redis
  1. در فایل settings.py، پیکربندی‌های اولیه مربوط به Celery و Redis را انجام دهید:
# settings.py

CELERY_BROKER_URL = 'redis://localhost:6379/0'  # آدرس Redis
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
  1. سپس، در مسیر پروژه خود، فایل جدیدی به نام celery.py در کنار فایل settings.py ایجاد کنید و کد زیر را در آن بنویسید تا تنظیمات Celery به Django اضافه شود:
تماشا در حالت تمام صفحه
  1. در نهایت، در فایل __init__.py در پوشه پروژه، Celery را وارد کنید:
تماشا در حالت تمام صفحه

تا اینجا، Celery به صورت کامل نصب و در پروژه Django شما پیکربندی شده است. در ادامه، نحوه ایجاد یک وظیفه (task) و اجرای آن در پس‌زمینه را بررسی می‌کنیم.

۲. ایجاد وظایف (Tasks) در Celery

در Celery، وظایف (tasks) به عنوان توابعی تعریف می‌شوند که می‌توانند به صورت غیرهم‌زمان اجرا شوند. این وظایف می‌توانند شامل هرگونه عملیات مانند ارسال ایمیل، پردازش داده یا جمع‌آوری اطلاعات از APIهای خارجی باشند. برای تعریف یک وظیفه، می‌توانید از دکوریتور @shared_task استفاده کنید.

مثال: ایجاد یک وظیفه ارسال ایمیل

  1. یک فایل جدید به نام tasks.py در یکی از اپلیکیشن‌های Django ایجاد کنید (به عنوان مثال، اپلیکیشن accounts).
  2. در این فایل، وظیفه خود را با استفاده از @shared_task تعریف کنید:
تماشا در حالت تمام صفحه
  1. برای فراخوانی این وظیفه و اجرای آن، کافی است آن را به صورت زیر فراخوانی کنید:
تماشا در حالت تمام صفحه

با استفاده از .delay()، این وظیفه به Celery ارسال می‌شود تا در پس‌زمینه اجرا شود و کاربر نیازی به انتظار برای تکمیل آن ندارد. در ادامه، به نحوه زمان‌بندی این وظایف می‌پردازیم.

۳. زمان‌بندی وظایف با استفاده از Celery Beat

Celery Beat یک افزونه برای Celery است که امکان زمان‌بندی وظایف را فراهم می‌کند. به عنوان مثال، می‌توانید وظایفی را تنظیم کنید که هر روز یا هر هفته اجرا شوند. برای استفاده از Celery Beat، ابتدا باید آن را نصب کنید.

  1. با دستور زیر، Celery Beat را نصب کنید:
pip install django-celery-beat
  1. پس از نصب، django-celery-beat را به لیست اپلیکیشن‌های Django در settings.py اضافه کنید:
INSTALLED_APPS = [
    ...
    'django_celery_beat',
]
  1. با اجرای دستورات زیر، جداول مربوط به Celery Beat را به پایگاه داده خود اضافه کنید:
python manage.py migrate django_celery_beat
  1. اکنون می‌توانید وظایفی را از طریق پنل ادمین Django زمان‌بندی کنید. کافی است یک وظیفه را به صورت معمول در tasks.py تعریف کرده و سپس در پنل ادمین، زمان اجرای آن را تنظیم کنید.

۴. مدیریت خطاها و وضعیت وظایف

یکی از مهم‌ترین ویژگی‌های Celery، امکان بررسی وضعیت وظایف و مدیریت خطاها است. می‌توانید از Celery استفاده کنید تا وضعیت اجرا و هرگونه خطای رخ‌داده را پیگیری کنید.

برای مدیریت خطاها، می‌توانید از پارامتر retry در وظایف استفاده کنید تا در صورت وقوع خطا، وظیفه به صورت خودکار مجدداً تلاش شود.

مثال: مدیریت خطاها با retry

تماشا در حالت تمام صفحه

در این مثال، اگر وظیفه fetch_data با خطا مواجه شود، تا ۳ بار و با فاصله ۶۰ ثانیه تلاش مجدد خواهد کرد.

۵. اجرای Celery و Celery Beat

برای اجرای Celery و Celery Beat، باید دو فرآیند جداگانه راه‌اندازی کنید:

  1. برای اجرای Celery Worker:
celery -A your_project_name worker -l info
  1. برای اجرای Celery Beat:
celery -A your_project_name beat -l info

هر دوی این فرآیندها باید به صورت هم‌زمان در حال اجرا باشند تا وظایف زمان‌بندی شده به درستی کار کنند.

Celery یکی از بهترین ابزارها برای اجرای وظایف پس‌زمینه در Django است و با استفاده از Celery Beat، می‌توان وظایف زمان‌بندی شده را به راحتی مدیریت کرد. این مقاله به شما نشان داد که چگونه Celery را نصب و پیکربندی کنید، وظایف ایجاد کنید و آن‌ها را زمان‌بندی و مدیریت کنید. امیدواریم این آموزش به شما کمک کند تا وظایف پیچیده‌تر و حرفه‌ای‌تر را در پروژه‌های Django خود پیاده‌سازی کنید.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
بنر تبلیغاتی ج