تسک ها با Django-Q جنگو
04 Tir 1402
0 نظر
16 : 3
تسک ها با Django-Q

برای انجام تسک ها در پس زمینه میتونید برید سراغ سلری که لازمه از یک task broker مثل rabbitmq استفاده کنید که کار رو پیچیده تر و سخت تر از چیزی میکنه که هست ، میخوام بگم سلری مناسب پروژه های کوچیک نیست. پس چیکار کنیم میتونیم از لایبراری Django Q استفاده کنیم (دقت کنید که این Q رو با اون Q ابجکتی که برای فیلتر های پیچیده در کوئری مون استفاده می کنیم اشتباه نگیرید) 

 

اگر نمیدونید چرا نیازه از لایبراری هایی مثل celery یا Django Q استفاده کنید تو مقاله بعدی مینویسم که چه مشکلاتی بوجود میاد که ما رو به سمت استفاده از این لایبراری ها برای مدیریت کار ها میبره.

 

1-برای نصب کردن دستور زیر رو در ترمینال IDE اجرا کنید

pip install django-q

 

2-در مسیر پروژه اصلی وارد settings.py بشید و به شکل زیر django-q به INSTALLED_APPS هاتون اضافه کنید.

INSTALLED_APPS = (
    # other apps
    'django_q',
)

2-1یادتون نره در settings.py باید django-q رو به شکل زیر تنظیم (کانفیگ) کنید 

Q_CLUSTER = {
   'retry': 5
   'workers': 4,
   'orm': 'default',
}

3-لایبراری django-q به یک broker (کسی که کار ها رو لیست میکنه و پیگری میکنه چه کاری انجام شده یا نه مثل rabbitmq) نیاز داره و بجای استفاده از rabbitmq از پایگاه داده(دیتابیس) خود پروژتون استفاده میکنه (اینجوری دیگه لازم نیست کار با broker هایی مثل rabbitmq رو یادبگیرید و برای یک پروژه کوچک درگیر پیچیدگی های زیادی بشید) فقط کافیه دستور زیر رو اجرا کنید تا دیتابیس هایی که میخواد ازشون بعوان broker استفاده کنه رو ایجاد کنه.

 

 

python manage.py migrate

4-برای اینکه django-q اجرا بشه نیازه دستور زیر رو اجرا کنید ، درست مثل جنگو که برای اجرا شدنش لازمه دستور( python manage.py runserver 8000) اجرا بشه.

python manage.py qcluster

 

خب به مرحله اخر رسیدیم ، چجوری تو backend بگیم میخوایم متدمون توسط django-q استفاده بشه

فکر کنید متد زیر رو برای ارسال ایمیل خبرنامه به اعضا درست کردید برای اینکه کد تون تمیز باشه میتونید متد هایی که قراره بعنوان یک task توسط django-q اجرا بشن رو در فایل task.py که در روت پروژه مورد نظرتون هست بنویسید.

 

my_project/tasks.py

def send_email_for_newsletter():

    pass # somthing

 

 

حالا هر جا که بخواید این متد بعنوان یک task در یک thread دیگه اجرا بشه کافیه تابع async_task رو از django_q.tasks ایمپورت و به شکل زیر استفاده کنید.

from django_q.tasks import async_task

from .tasks import send_email_for_newsletter

def view(request):

    async_task(send_email_for_newsletter)

 

چند قدم در چند راه

ابتدا وارد شوید یا ثبت نام کنید!

برای ثبت نظر، نقد ابتدا باید وارد شوید یا ثبت نام کنید.
سبد خرید