Ninja Learn | نینجا لرن
💣 بکگراند تسک در برنامهنویسی وب 💣 #پست_جدید بکگراند تسکها یا وظایف پسزمینهای، عملیاتهایی هستن که خارج از پراسس یا ترد اصلی اجرای برنامه (main thread) اجرا میشن. این عملیاتها به گونهای طراحی شدن که بدون تداخل در پاسخدهی برنامه به کاربرا، وظایف خاصی…
برای مثال، فایل/ماژول تنظیمات پروژه جنگویی ممکنه شامل این موارد باشه:
فایل settings.py:
در عوض میتونید آبجکت تنظیمات رو مستقیماً ارسال کنید، اما استفاده از یک رشته بهتره چون ورکر (Worker) مجبور نیست آبجکت رو سریالایز کنه. نیم اسپیس CELERY_ هم اختیاریه، اما توصیه می شه (برای جلوگیری از overlap با تنظیمات دیگه جنگو).
در مرحله بعدی، یک روش معمول برای برنامه های قابل استفاده مجدد (Reusable) این هست که همه وظایف رو در یک ماژول tasks.py جداگونه تعریف کنن و Celery راهی برای کشف خودکار این ماژول ها داره:
با خط بالا، Celery بهطور خودکار وظایف/تسک های همه برنامههای نصبشده شما رو با پیروی از قرارداد tasks.py کشف میکنه:
- app1/
- tasks.py
- models.py
- app2/
- tasks.py
- models.py
به این ترتیب شما مجبور نیستید به صورت دستی ماژول های جداگونه رو به تنظیمات CELERY_IMPORTS اضافه کنید.
در نهایت، مثال debug_task تسکی هست که از گزینه bind=True task جدید معرفی شده در Celery 3.1 استفاده می کنه تا به راحتی به نمونه (Instance) جاب (Job) فعلی مراجعه کنه.
3️⃣ استفاده از دکوریتور shared_task decorator@:
تسک هایی که می نویسین احتمالاً در برنامه های قابل استفاده مجدد (reusable apps) زندگی می کنن و برنامه های قابل استفاده مجدد نمی تونن به خود پروژه وابسته باشند، بنابراین شما همچنین نمی تونید نمونه (instance) برنامه خودتون را مستقیماً ایمپورت کنید.
دکوریتور @shared_task به شما این امکان میده که بدون داشتن نمونه برنامه مشخص، Job ها رو ایجاد کنید:
فایل demoapp/tasks.py:
⭕️ به جای demoapp اسم app خودتون رو بنویسید ⭕️
4️⃣ صدا زدن تسک ها:
در نهایت با متد delay میتونید تسک خودتون رو اجرا کنید:
⭕️ توی این مثال اسم تابعی که تسک ما رو اجرا میکنه add هست ⭕️
5️⃣ اجرای سلری برای هندل کردن تسکا:
❗️برای اجرای سلری پیشنهاد میکنم پروژتون رو داکرایز کنید و از داکر استفاده کنید چرا که امکان اجرای سلری مستقیما روی سیستم عامل ویندوز وجود نداره (فقط کافیه یه سرویس به اسم celery داخل فایل compose ایجاد کنید و CMD اون سرویس رو به دستوری که در ادامه نوشته شده تغییر بدید)❗️
در نهایت با این دستور میتونید سلری رو اجرا کنید تا تسک ها رو هندل کنه:
⭕️ به جای proj اسم پروژه خودتون رو بنویسید ⭕️
🌹 امیدوارم خوشتون اومده باشه 🌹
🎁 به زودی یه ویدیو آموزشی جامع برای کار با سلری ضبط میکنیم 🎁
#جنگو #سلری #celery
@ninja_learn_ir
فایل settings.py:
CELERY_TIMEZONE = "Asia/tehran"
CELERY_TASK_TRACK_STARTED = True
CELERY_TASK_TIME_LIMIT = 30 * 60
در عوض میتونید آبجکت تنظیمات رو مستقیماً ارسال کنید، اما استفاده از یک رشته بهتره چون ورکر (Worker) مجبور نیست آبجکت رو سریالایز کنه. نیم اسپیس CELERY_ هم اختیاریه، اما توصیه می شه (برای جلوگیری از overlap با تنظیمات دیگه جنگو).
در مرحله بعدی، یک روش معمول برای برنامه های قابل استفاده مجدد (Reusable) این هست که همه وظایف رو در یک ماژول tasks.py جداگونه تعریف کنن و Celery راهی برای کشف خودکار این ماژول ها داره:
app.autodiscover_tasks()
با خط بالا، Celery بهطور خودکار وظایف/تسک های همه برنامههای نصبشده شما رو با پیروی از قرارداد tasks.py کشف میکنه:
- app1/
- tasks.py
- models.py
- app2/
- tasks.py
- models.py
به این ترتیب شما مجبور نیستید به صورت دستی ماژول های جداگونه رو به تنظیمات CELERY_IMPORTS اضافه کنید.
در نهایت، مثال debug_task تسکی هست که از گزینه bind=True task جدید معرفی شده در Celery 3.1 استفاده می کنه تا به راحتی به نمونه (Instance) جاب (Job) فعلی مراجعه کنه.
3️⃣ استفاده از دکوریتور shared_task decorator@:
تسک هایی که می نویسین احتمالاً در برنامه های قابل استفاده مجدد (reusable apps) زندگی می کنن و برنامه های قابل استفاده مجدد نمی تونن به خود پروژه وابسته باشند، بنابراین شما همچنین نمی تونید نمونه (instance) برنامه خودتون را مستقیماً ایمپورت کنید.
دکوریتور @shared_task به شما این امکان میده که بدون داشتن نمونه برنامه مشخص، Job ها رو ایجاد کنید:
فایل demoapp/tasks.py:
from demoapp.models import Widget
from celery import shared_task
@shared_task
def add(x, y):
return x + y
@shared_task
def mul(x, y):
return x * y
@shared_task
def xsum(numbers):
return sum(numbers)
@shared_task
def count_widgets():
return Widget.objects.count()
@shared_task
def rename_widget(widget_id, name):
w = Widget.objects.get(id=widget_id)
w.name = name
w.save()
⭕️ به جای demoapp اسم app خودتون رو بنویسید ⭕️
4️⃣ صدا زدن تسک ها:
در نهایت با متد delay میتونید تسک خودتون رو اجرا کنید:
add.delay(2, 4)
⭕️ توی این مثال اسم تابعی که تسک ما رو اجرا میکنه add هست ⭕️
5️⃣ اجرای سلری برای هندل کردن تسکا:
❗️برای اجرای سلری پیشنهاد میکنم پروژتون رو داکرایز کنید و از داکر استفاده کنید چرا که امکان اجرای سلری مستقیما روی سیستم عامل ویندوز وجود نداره (فقط کافیه یه سرویس به اسم celery داخل فایل compose ایجاد کنید و CMD اون سرویس رو به دستوری که در ادامه نوشته شده تغییر بدید)❗️
در نهایت با این دستور میتونید سلری رو اجرا کنید تا تسک ها رو هندل کنه:
celery -A proj worker -l INFO
⭕️ به جای proj اسم پروژه خودتون رو بنویسید ⭕️
🌹 امیدوارم خوشتون اومده باشه 🌹
🎁 به زودی یه ویدیو آموزشی جامع برای کار با سلری ضبط میکنیم 🎁
#جنگو #سلری #celery
@ninja_learn_ir
Docker
Docker: Accelerated Container Application Development
Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.
👍13
🐇 استفاده از RabbitMQ برای Celery توی جنگو 🥦
امروز میخوایم در مورد Celery و RabbitMQ حرف بزنیم و ببینیم چطوری میتونیم از این دو تا ابزار خفن برای مدیریت کارهای پسزمینه توی Django استفاده کنیم 😎.
حالا Celery چیه؟ 🍃
اگه نمیدونید سلری چیه و چیکار میکنه میتونید به این پست سر بزنید 😉
حالا RabbitMQ چیه؟ 🐇
اگه نمیدونید ربیت ام کیو چیه و چیکار میکنه میتونید به این پست سر بزنید 😉
چرا باید از RabbitMQ برای Celery استفاده کنیم؟ 🧐
1⃣ پایداری و سرعت: RabbitMQ خیلی سریع و پایدار کار میکنه و میتونه حجم زیادی از پیامها رو مدیریت کنه.
2⃣ مقیاسپذیری (Scalability):
اگه پروژهات بزرگ شد، RabbitMQ میتونه بدون مشکل تسکهای بیشتری رو هندل کنه.
3⃣ پشتیبانی از Celery: Celery به خوبی با RabbitMQ سازگاره و به راحتی میتونن با هم کار کنن.
چجوری RabbitMQ رو برای Celery توی جنگو تنظیم کنیم؟ 🛠️
خب، بیایید بریم سراغ بخش فنی و ببینیم چطور میتونیم از RabbitMQ و Celery توی جنگو استفاده کنیم.
1⃣ نصب RabbitMQ و Celery
اول از همه باید RabbitMQ رو نصب کنی. اگه از اوبونتو استفاده میکنی، این دستور رو بزن:
حالا Celery رو نصب کن:
2⃣ تنظیمات Celery توی پروژه جنگو
توی پروژه جنگوت، یه فایل جدید به اسم
بعد توی فایل init.py پروژهات این خط رو اضافه کن تا Celery لود بشه:
3⃣ تنظیمات RabbitMQ توی settings.py:
توی settings.py، تنظیمات مربوط به RabbitMQ رو به Celery اضافه کن:
4⃣ ساختن تسکها (Tasks)
حالا که تنظیمات انجام شد، میتونیم تسکهای پسزمینه رو بسازیم. توی هر اپلیکیشنی که تسکها رو میخوای ایجاد کنی، یه فایل tasks.py بساز و تسکهات رو توش تعریف کن:
5⃣ اجرای Celery Worker
برای اینکه Celery تسکها رو هندل کنه، Worker راه بندازی. با این دستور میتونی Worker رو اجرا کنی:
جمعبندی 🎯
فهمیدیم RabbitMQ و Celery یه ترکیب عالی برای اجرای تسکهای پسزمینه توی پروژههای جنگو هستن. با استفاده از RabbitMQ بهعنوان message broker و Celery برای مدیریت تسکها، میتونی کارهای سنگین و زمانبر رو به صورت پسزمینه اجرا کنی و تجربه کاربری اپلیکیشن رو بهتر کنی 😎
امید وارم مفید بوده باشه :)
@ninja_learn_ir
امروز میخوایم در مورد Celery و RabbitMQ حرف بزنیم و ببینیم چطوری میتونیم از این دو تا ابزار خفن برای مدیریت کارهای پسزمینه توی Django استفاده کنیم 😎.
حالا Celery چیه؟ 🍃
اگه نمیدونید سلری چیه و چیکار میکنه میتونید به این پست سر بزنید 😉
حالا RabbitMQ چیه؟ 🐇
اگه نمیدونید ربیت ام کیو چیه و چیکار میکنه میتونید به این پست سر بزنید 😉
چرا باید از RabbitMQ برای Celery استفاده کنیم؟ 🧐
1⃣ پایداری و سرعت: RabbitMQ خیلی سریع و پایدار کار میکنه و میتونه حجم زیادی از پیامها رو مدیریت کنه.
2⃣ مقیاسپذیری (Scalability):
اگه پروژهات بزرگ شد، RabbitMQ میتونه بدون مشکل تسکهای بیشتری رو هندل کنه.
3⃣ پشتیبانی از Celery: Celery به خوبی با RabbitMQ سازگاره و به راحتی میتونن با هم کار کنن.
چجوری RabbitMQ رو برای Celery توی جنگو تنظیم کنیم؟ 🛠️
خب، بیایید بریم سراغ بخش فنی و ببینیم چطور میتونیم از RabbitMQ و Celery توی جنگو استفاده کنیم.
1⃣ نصب RabbitMQ و Celery
اول از همه باید RabbitMQ رو نصب کنی. اگه از اوبونتو استفاده میکنی، این دستور رو بزن:
sudo apt-get install rabbitmq-server
حالا Celery رو نصب کن:
pip install celery
2⃣ تنظیمات Celery توی پروژه جنگو
توی پروژه جنگوت، یه فایل جدید به اسم
celery.py
بساز و تنظیمات Celery رو توش بنویس. این فایل معمولاً توی کنار settings.py قرار میگیره.from __future__ import absolute_import
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')
app = Celery('your_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
بعد توی فایل init.py پروژهات این خط رو اضافه کن تا Celery لود بشه:
from .celery import app as celery_app
3⃣ تنظیمات RabbitMQ توی settings.py:
توی settings.py، تنظیمات مربوط به RabbitMQ رو به Celery اضافه کن:
CELERY_BROKER_URL = 'amqp://localhost'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
4⃣ ساختن تسکها (Tasks)
حالا که تنظیمات انجام شد، میتونیم تسکهای پسزمینه رو بسازیم. توی هر اپلیکیشنی که تسکها رو میخوای ایجاد کنی، یه فایل tasks.py بساز و تسکهات رو توش تعریف کن:
from celery import shared_task
@shared_task
def send_email_task(email_address):
# کد ارسال ایمیل
print(f"ایمیل به {email_address} ارسال شد.")
5⃣ اجرای Celery Worker
برای اینکه Celery تسکها رو هندل کنه، Worker راه بندازی. با این دستور میتونی Worker رو اجرا کنی:
celery -A your_project worker --loglevel=info
جمعبندی 🎯
فهمیدیم RabbitMQ و Celery یه ترکیب عالی برای اجرای تسکهای پسزمینه توی پروژههای جنگو هستن. با استفاده از RabbitMQ بهعنوان message broker و Celery برای مدیریت تسکها، میتونی کارهای سنگین و زمانبر رو به صورت پسزمینه اجرا کنی و تجربه کاربری اپلیکیشن رو بهتر کنی 😎
#django #celery #rabbitmq #ambq
👍6❤3🔥3