زمان بندی وظایف در 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 و Celery Beat، باید دو فرآیند جداگانه راهاندازی کنید:
- برای اجرای Celery Worker:
celery -A your_project_name worker -l info
- برای اجرای Celery Beat:
celery -A your_project_name beat -l info
هر دوی این فرآیندها باید به صورت همزمان در حال اجرا باشند تا وظایف زمانبندی شده به درستی کار کنند.
Celery یکی از بهترین ابزارها برای اجرای وظایف پسزمینه در Django است و با استفاده از Celery Beat، میتوان وظایف زمانبندی شده را به راحتی مدیریت کرد. این مقاله به شما نشان داد که چگونه Celery را نصب و پیکربندی کنید، وظایف ایجاد کنید و آنها را زمانبندی و مدیریت کنید. امیدواریم این آموزش به شما کمک کند تا وظایف پیچیدهتر و حرفهایتر را در پروژههای Django خود پیادهسازی کنید.
آیا این مطلب برای شما مفید بود ؟