آشنایی جامع با Celery در جنگو همراه با مثال عملی
Celery یک سیستم صف وظیفه برای اجرای عملیات سنگین در پسزمینه است و در جنگو زمانی استفاده میشود که نمیخواهیم درخواست HTTP معطل کارهای زمانبر بماند. با کمک یک پیامرسان مثل Redis، وظایف به صف فرستاده میشوند و Workerها آنها را غیرهمزمان اجرا میکنند. این موضوع باعث افزایش سرعت پاسخگویی، مدیریت بهتر منابع و امکان زمانبندی کارهای تکرارشونده میشود.
مقدمه
در معماری برنامههای وب مدرن، اجرای وظایف زمانبر (Time-Consuming Tasks) در فرآیند پاسخدهی HTTP باعث کاهش شدید عملکرد و تجربه کاربری میشود. عملیاتهایی مانند ارسال ایمیل، پردازش فایلهای حجیم، تولید گزارش، یا فراخوانی APIهای خارجی جزو این دسته هستند.
در چارچوب Django راهحل استاندارد برای این مسئله، استفاده از Celery است؛ یک سیستم مدیریت صف مبتنی بر پیامرسانها که امکان اجرای وظایف را در پسزمینه، بهصورت غیرهمزمان و توزیعشده فراهم میکند.
Celery چیست؟
Celery یک ابزار Distributed Task Queue است که وظایف (Tasks) را به کمک یک Message Broker مانند RabbitMQ یا Redis مدیریت و برنامهریزی میکند. Celery دارای سه مؤلفه اصلی است:
-
Task Producer (Django App)
جایی که وظیفه تعریف و به صف ارسال میشود. -
Broker (Redis, RabbitMQ)
مسئول انتقال پیام بین تولیدکننده و Worker است. -
Worker
پردازش وظایف ارسالشده به صف را انجام میدهد.
مزایای استفاده از Celery
-
اجرای غیرهمزمان وظایف
-
بالابردن سرعت پاسخدهی درخواستها
-
قابلیت توزیع در چند سرور
-
امکان زمانبندی وظایف (Celery Beat)
-
پشتیبانی از retry، monitoring و result backend
نحوه راهاندازی Celery در Django
در این بخش یک مثال کامل ارائه میشود که شامل تعریف پروژه، پیکربندی Celery و اجرای یک Task نمونه مانند ارسال ایمیل است.
۱. نصب Celery و Redis
برای سادگی، Redis را به عنوان Message Broker انتخاب میکنیم.
اجرای Redis (در لینوکس یا مک):
۲. ساختار پروژه Django
فرض کنید پروژهای با نام myproject و اپلیکیشنی با نام core داریم:
۳. پیکربندی Celery — ساخت فایل celery.py
در مسیر myproject/myproject/celery.py فایل زیر را ایجاد کنید:
در فایل __init__.py همین فولدر، Celery را لود کنید:
۴. افزودن تنظیمات مورد نیاز در settings.py
۵. تعریف یک Task نمونه
در فایل core/tasks.py:
۶. فراخوانی Task در View
در core/views.py:
فراخوانی .delay باعث میشود وظیفه به صف ارسال شود و بلاک نشود.
۷. اجرای Worker
در ترمینال:
۸. استفاده از Celery Beat برای زمانبندی وظایف
نصب:
در settings.py:
در tasks.py:
اجرای Beat:
نتیجهگیری
Celery یکی از مهمترین ابزارها برای توسعه وب اپلیکیشنهای مقیاسپذیر در جنگو است. استفاده از مدل صفمحور آن باعث مدیریت بهتر عملیات سنگین، بهبود پاسخدهی و افزایش قابلیت توسعه میشود. ویژگیهایی مانند اجرای غیرهمزمان وظایف، زمانبندی دقیق و قابلیت توزیع در چند سرور، Celery را به انتخاب اصلی برای مدیریت Taskها در پروژههای متوسط تا بزرگ Django تبدیل کرده است.