از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش استفاده از کرفس در جنگو

سرفصلهای مطلب
احتمالاً متوجه شده اید که به نظر می رسد برخی از کارها در برنامه Django شما مدت زمان زیادی طول می کشد. به عنوان مثال ، شاید ارسال ایمیل های تأیید ، تغییر اندازه تصاویر یا پردازش پرونده های داده بزرگ ، کارها را کاهش دهد.
خبر خوب؟ لازم نیست در انتظار بنشینید. شما می توانید آن کارها را به چیز دیگری تحویل دهید و به برنامه خود اجازه دهید کار خود را ادامه دهد. این “چیز دیگری” کرفس است.
کرفس به شما امکان می دهد در حالی که برنامه شما سریع می ماند ، کارهای وقت گیر را در پس زمینه انجام دهید. و اگر از Django استفاده می کنید ، وصل کردن آن در واقع کار سختی نیست – هنگامی که می فهمید که قطعات با هم چگونه کار می کنند.
در این راهنما ، شما را از طریق کرفس چه چیزی می گذارم ، چرا مفید است ، و دقیقاً چگونه می توان آن را با Django قدم به قدم تنظیم کرد.
فهرست مطالب
-
کرفس چیست و چرا باید از آن در جنگو استفاده کنید؟
-
چگونه کرفس کار می کند (نسخه ساده)
-
روش استفاده از کرفس در جنگو
-
1. بسته های مناسب را نصب کنید
-
2. یک کرفس ایجاد کنید.py در پوشه پروژه خود پرونده کنید
-
3. کرفس را به آن اضافه کنید شروع کردنبشرpy
-
4. URL کارگزار را در تنظیمات خود تنظیم کنید
-
5. اولین کار خود را بنویسید
-
6. از نظرات خود کار را صدا کنید
-
7. کارگر کرفس را اجرا کنید
-
-
اختیاری: استفاده از مدیر Django برای نظارت بر وظایف
-
پرسش
-
چه اتفاقی می افتد اگر Redis پایین بیاید؟
-
آیا می توانم کارهای شکست خورده را دوباره امتحان کنم؟
-
آیا کرفس تنها گزینه است؟
-
-
پیچیدن آن
-
خواندن و منابع بیشتر
کرفس چیست و چرا باید از آن در جنگو استفاده کنید؟
تصور کنید که در حال اداره یک فروشگاه آنلاین هستید. کسی سفارش می دهد. شما می خواهید:
-
سفارش را در پایگاه داده ذخیره کنید
-
برای آنها فاکتور از طریق ایمیل ارسال کنید
-
به انبار خود اطلاع دهید
-
شاید حتی شروع به چاپ یک برچسب حمل و نقل کنید
اگر برنامه شما سعی می کند همه این کارها را یکباره انجام دهد ، کاربر شما قرار است در یک صفحه بارگیری خیره شود. در عوض ، اگر فقط سفارش را بلافاصله ذخیره کنید – و بقیه را به کرفس منتقل کنید تا در پس زمینه اداره شود؟
این دقیقاً همان کاری است که کرفس انجام می دهد.
این یک صف کار است – که فقط به این معنی است که بعداً همه چیز را اجرا می کند ، بنابراین برنامه اصلی شما لازم نیست صبر کنید. این به ویژه برای:
-
ارسال ایمیل
-
واردات/صادرات داده ها
-
در حال اجرا مدل های یادگیری ماشین
-
داده های خراش دهنده
-
تولید گزارش ها
و بله ، با Django بسیار خوب کار می کند.
چگونه کرفس کار می کند (نسخه ساده)
کرفس از چند قسمت تشکیل شده است:
-
تولید کننده کار (برنامه Django شما) – این جایی است که شما یک کار را می نامید.
-
کارگزار (معمولاً redis) – این واسطه است. این کار را انجام می دهد و آن را نگه می دارد تا یک کارگر بتواند آن را بگیرد.
-
کارگر – این پیشینه کرفس است process این وظایف را از کارگزار می گیرد و آنها را اجرا می کند.
این جریان است:
Django app → Redis → Celery Worker → Done ✅
حالا بیایید واقعاً این را تنظیم کنیم.
روش استفاده از کرفس در جنگو
1. بسته های مناسب را نصب کنید
شما نیاز دارید celery
و یک کارگزار پیام. Redis یک انتخاب محبوب است.
pip install celery redis
همچنین مطمئن شوید که در حال اجرا هستید. می توانید آن را به صورت محلی از طریق Homebrew نصب کنید (brew install redis
) یا از داکر استفاده کنید containerبشر
اگر از Docker استفاده می کنید:
docker run -p 6379:6379 redis
2. ایجاد یک celery.py
در پوشه پروژه خود پرونده کنید
بیایید بگوییم پروژه Django شما خوانده می شود myproject
بشر داخل همان پوشه (کجا settings.py
است) ، یک فایل به نام ایجاد کنید celery.py
بشر
# myproject/celery.py
import os
from celery import Celery
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
app = Celery("myproject")
app.config_from_object("django.conf:settings", namespace="CELERY")
app.autodiscover_tasks()
این اتفاق می افتد:
-
os.environ...
تنظیمات Django را تنظیم می کند. -
Celery("myproject")
یک برنامه کرفس جدید با نام پروژه خود ایجاد می کند. -
app.config_from_object(...)
به کرفس می گوید که پیکربندی را از پرونده تنظیمات Django بخواند. -
autodiscover_tasks()
به کرفس می گوید که به طور خودکار وظایف خود را در برنامه های Django پیدا کنید.
3. کرفس را به آن اضافه کنید __init__.py
هنوز در شما myproject/
پوشه ، باز __init__.py
و اضافه کنید:
from .celery import app as celery_app
__all__ = ("celery_app",)
این امر باعث می شود کرفس با Django شروع شود.
4. URL کارگزار را در تنظیمات خود تنظیم کنید
باز settings.py
و اضافه کنید:
CELERY_BROKER_URL = 'redis://localhost:6379/0'
این به کرفس می گوید که از Redis به عنوان کارگزار استفاده کند.
5. اولین کار خود را بنویسید
به یکی از برنامه های Django خود بروید (بگویید برنامه ای به نام خود دارید shop
) ، و ایجاد پرونده ای به نام tasks.py
بشر
# shop/tasks.py
from celery import shared_task
@shared_task
def send_invoice_email(order_id):
# Imagine this sends an email
print(f"Sending invoice email for order {order_id}")
در @shared_task
دکوراتور به کرفس می گوید این یک کار پس زمینه است.
6. از نظرات خود کار را صدا کنید
در اینجا روش استفاده از آن در نمای جنگو آورده شده است:
# shop/views.py
from .tasks import send_invoice_email
from django.shortcuts import render
def place_order(request):
# pretend this saves an order
order_id = 1234 # this would come from your model
# run the task in the background
send_invoice_email.delay(order_id)
return render(request, "order_complete.html")
توجه کنید .delay()
– این همان چیزی است که کار را به کرفس می فرستد.
7. کارگر کرفس را اجرا کنید
اکنون باز کنید terminal و کارگر را شروع کنید:
celery -A myproject worker --loglevel=info
باید کارگر را شروع کنید و منتظر کارها باشید. وقتی سفارش می دهید ، آن را print چیزی مانند:
Sending invoice email for order 1234
اختیاری: استفاده از مدیر Django برای نظارت بر وظایف
اگر می خواهید وضعیت کار را در مدیر نظارت کنید ، می توانید از Results Django-Celery استفاده کنید.
pip install django-celery-results
سپس خود را به روز کنید settings.py
:
INSTALLED_APPS += ["django_celery_results"]
CELERY_RESULT_BACKEND = "django-db"
مهاجرت را اجرا کنید:
python manage.py migrate
اکنون کرفس نتایج کار را در پایگاه داده شما ذخیره می کند ، و می توانید آنها را در Django Admin مشاهده کنید.
پرسش
چه اتفاقی می افتد اگر Redis پایین بیاید؟
وظایف شما ارسال نمی شود یا برداشت نمی شود. اما پس از بازگشت Redis ، همه چیز باید از سر گرفته شود.
آیا می توانم کارهای شکست خورده را دوباره امتحان کنم؟
بله کرفس از احیای مجدد پشتیبانی می کند. شما می توانید چند بار کار را دوباره امتحان کنید و چند بار. مثال:
@shared_task(bind=True, max_retries=3)
def risky_task(self):
try:
# Do something risky
pass
except Exception as e:
raise self.retry(exc=e, countdown=60)
آیا کرفس تنها گزینه است؟
نه. Django Q ، Dramatiq و Huey نیز وجود دارد. اما کرفس بالغ ترین است و بزرگترین جامعه را دارد.
پیچیدن آن
استفاده از کرفس در Django فقط سرعت بخشیدن به این موارد نیست – بلکه به بهبود تجربه برای کاربران شما نیز کمک می کند.
بارگذاری کارهای سنگین یا آهسته باعث می شود برنامه شما احساس خستگی و اطمینان بیشتری داشته باشد.
پس از پایین آمدن اصول ، خود را برای استفاده از آن برای انواع چیزها پیدا خواهید کرد.
خواندن و منابع بیشتر
-
کرفس Documentation
-
Redis Quickstart
-
جنجال های دژنگو
-
کارهای ناهمزمان در جنگو (پایتون واقعی)
-
نظارت کرفس با گل
منتشر شده در 1404-04-19 00:07:05