زمان بندی وظایف در Django با Celery
در این بخش به بررسی نحوه زمان بندی وظایف در Django با Celery می پردازیم، در پروژههای وبی که با Django پیادهسازی میشوند، بسیاری از مواقع نیاز است وظایف خاصی در پسزمینه به صورت دورهای یا با تأخیر اجرا شوند. به عنوان مثال، ارسال ایمیلهای اطلاعرسانی، پردازش سنگین دادهها، یا حتی پاکسازی دادههای قدیمی، نیازمند سیستمی است که این وظایف را به جای اجرای مستقیم در زمان درخواست کاربر، به زمان دیگری موکول کند. Celery یکی از محبوبترین ابزارها برای اجرای این گونه وظایف پسزمینه است. این کتابخانه، بهخصوص در کنار Django، امکان مدیریت وظایف زمانبندی شده و اجرای موازی آنها را فراهم میکند.
Celery با استفاده از یک سیستم صفگذاری مانند RabbitMQ یا Redis کار میکند و این صفها را به گونهای مدیریت میکند که وظایف به صورت غیرهمزمان (asynchronous) و بدون تداخل در عملکرد اصلی وبسایت اجرا شوند. در این مقاله، به بررسی نحوه نصب و پیکربندی Celery در Django، تنظیمات لازم برای زمانبندی وظایف و اجرای آنها میپردازیم. همچنین با مثالهایی کاربردی، نحوه استفاده از Celery برای اجرای وظایف زمانبندی شده را به صورت کامل آموزش خواهیم داد.
۱. نصب و پیکربندی Celery در Django
برای استفاده از Celery در پروژه Django خود، ابتدا باید این کتابخانه را به همراه یکی از سیستمهای صفگذاری نصب کنید. Redis و RabbitMQ دو گزینه محبوب برای این کار هستند. در این آموزش، از Redis به عنوان سیستم صف استفاده خواهیم کرد.
گامهای نصب:
- ابتدا با استفاده از pip، Celery و Redis را نصب کنید:
pip install celery redis- در فایل
settings.py، پیکربندیهای اولیه مربوط به Celery و Redis را انجام دهید:
# settings.py
CELERY_BROKER_URL = 'redis://localhost:6379/0' # آدرس Redis
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'- سپس، در مسیر پروژه خود، فایل جدیدی به نام
celery.pyدر کنار فایلsettings.pyایجاد کنید و کد زیر را در آن بنویسید تا تنظیمات Celery به Django اضافه شود:
- در نهایت، در فایل
__init__.pyدر پوشه پروژه، Celery را وارد کنید:
تا اینجا، Celery به صورت کامل نصب و در پروژه Django شما پیکربندی شده است. در ادامه، نحوه ایجاد یک وظیفه (task) و اجرای آن در پسزمینه را بررسی میکنیم.
۲. ایجاد وظایف (Tasks) در Celery
در Celery، وظایف (tasks) به عنوان توابعی تعریف میشوند که میتوانند به صورت غیرهمزمان اجرا شوند. این وظایف میتوانند شامل هرگونه عملیات مانند ارسال ایمیل، پردازش داده یا جمعآوری اطلاعات از APIهای خارجی باشند. برای تعریف یک وظیفه، میتوانید از دکوریتور @shared_task استفاده کنید.
مثال: ایجاد یک وظیفه ارسال ایمیل
- یک فایل جدید به نام
tasks.pyدر یکی از اپلیکیشنهای Django ایجاد کنید (به عنوان مثال، اپلیکیشنaccounts). - در این فایل، وظیفه خود را با استفاده از
@shared_taskتعریف کنید:
- برای فراخوانی این وظیفه و اجرای آن، کافی است آن را به صورت زیر فراخوانی کنید:
با استفاده از .delay()، این وظیفه به Celery ارسال میشود تا در پسزمینه اجرا شود و کاربر نیازی به انتظار برای تکمیل آن ندارد. در ادامه، به نحوه زمانبندی این وظایف میپردازیم.
۳. زمانبندی وظایف با استفاده از Celery Beat
Celery Beat یک افزونه برای Celery است که امکان زمانبندی وظایف را فراهم میکند. به عنوان مثال، میتوانید وظایفی را تنظیم کنید که هر روز یا هر هفته اجرا شوند. برای استفاده از Celery Beat، ابتدا باید آن را نصب کنید.
- با دستور زیر، Celery Beat را نصب کنید:
pip install django-celery-beat- پس از نصب،
django-celery-beatرا به لیست اپلیکیشنهای Django درsettings.pyاضافه کنید:
INSTALLED_APPS = [
...
'django_celery_beat',
]- با اجرای دستورات زیر، جداول مربوط به Celery Beat را به پایگاه داده خود اضافه کنید:
python manage.py migrate django_celery_beat- اکنون میتوانید وظایفی را از طریق پنل ادمین Django زمانبندی کنید. کافی است یک وظیفه را به صورت معمول در
tasks.pyتعریف کرده و سپس در پنل ادمین، زمان اجرای آن را تنظیم کنید.
۴. مدیریت خطاها و وضعیت وظایف
یکی از مهمترین ویژگیهای Celery، امکان بررسی وضعیت وظایف و مدیریت خطاها است. میتوانید از Celery استفاده کنید تا وضعیت اجرا و هرگونه خطای رخداده را پیگیری کنید.
برای مدیریت خطاها، میتوانید از پارامتر retry در وظایف استفاده کنید تا در صورت وقوع خطا، وظیفه به صورت خودکار مجدداً تلاش شود.
مثال: مدیریت خطاها با retry
در این مثال، اگر وظیفه fetch_data با خطا مواجه شود، تا ۳ بار و با فاصله ۶۰ ثانیه تلاش مجدد خواهد کرد.
۵. اجرای Celery و Celery Beat
Celery یکی از بهترین ابزارها برای اجرای وظایف پسزمینه در Django است و با استفاده از Celery Beat، میتوان وظایف زمانبندی شده را به راحتی مدیریت کرد. این مقاله به شما نشان داد که چگونه Celery را نصب و پیکربندی کنید، وظایف ایجاد کنید و آنها را زمانبندی و مدیریت کنید. امیدواریم این آموزش به شما کمک کند تا وظایف پیچیدهتر و حرفهایتر را در پروژههای Django خود پیادهسازی کنید.
آیا این مطلب برای شما مفید بود ؟




