وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

Redis Queues و Redis Queue Dashboards برای توسعه API Python

0 6
زمان لازم برای مطالعه: 5 دقیقه


معرفی

ذخیره اطلاعات درون حافظه – ردیس به طور گسترده توسط توسعه دهندگان به عنوان پایگاه داده، لایه حافظه پنهان، برای مدیریت صف های کار و موارد دیگر استفاده می شود.

هنگامی که در حال ساختن API با مکانیزم صف شغلی برای انجام وظایفی مانند اجرای کارهای پرحافظه در پس‌زمینه، شمارش، هستید، مفید است. page بازدید، یا ارسال کمپین های ایمیل انبوه.

اگر در حال ساخت یک API در پایتون هستید، صف ردیس (RQ) ماژول به شما توابعی برای صف، زمان بندی و process این مشاغل با استقرار کارگران.

در این مقاله به بررسی این موضوع خواهید پرداخت ماژول RQ برای راه اندازی صف های شغلی و کارگران، و همچنین RQ-Dashboard ماژول برای تجسم آنها.

راه اندازی Redis

اگر قبلاً یک API ندارید، یا کد دیگری که می‌توانید Redis RQ را روی آن اعمال کنید، ندارید – می‌توانید ما را شبیه‌سازی کنید. مخزن GitHub با کد نمونه

بیایید مخزن را شبیه سازی کنیم و وابستگی های آن را نصب کنیم:

$ git clone (email protected):rasanegar/redis-queues-redis-queue-dashboards.git
$ cd redis-queues-redis-queue-dashboards
$ python -m venv env
$ . env/bin/activate
$ pip install -r requirements.txt

ما همچنین باید Redis را نصب کنیم، که اگر از سیستم عامل مبتنی بر لینوکس استفاده نمی کنید، در واقع می تواند کمی مشکل باشد. ساده ترین راه برای نصب روی سیستم عامل های غیر لینوکس از طریق Docker Compose:

$ docker-compose up -d

ما docker-compose فایل برای دانلود یک تصویر Redis پیکربندی شده است و این دستور آن را در پس زمینه اجرا می کند. یا می توانید Redis را به صورت محلی نصب کنید.

برای اوبونتو، نصب به این صورت است:

$ sudo apt-get install redis
$ sudo service redis-server start
Starting redis-server: redis-server.
$ redis-cli -v       
redis-cli 4.0.9

اکنون که محیط ما ایجاد شده است، بیایید نگاهی به آن بیندازیم صف های ردیس.

صف ردیس (RQ)

این صف ردیس (RQ) یک ماژول صف است که اجرا می شود روی بالای ردیس این به عنوان تولید کننده برای ارسال مشاغل به صف عمل می کند. این ماژول همچنین با کارگرانی همراه است که به عنوان مصرف کننده عمل می کنند process کارهای ارسالی از صف به صورت ناهمزمان. اما، به هر حال شغل چیست؟

Jobs ارجاعاتی به توابع پایتون هستند که به صف قرار می گیرند.

صف های متعدد به process مشاغل می توانند وجود داشته باشند، و این صف ها را می توان به هر شکلی که می خواهید نامگذاری کرد. مشاغل ارسال شده به صف ها را می توان با استفاده از شناسه شغلی آنها نظارت کرد.

بیایید یک اسکریپت ساده بنویسیم تا یک کار را در صف ردیس قرار دهیم، به عنوان مثال، test.py:


from redis import Redis

from rq import Queue


from test_job import i_am_a_job


q = Queue(connection=Redis())
 

job = q.enqueue(i_am_a_job, 1)

تابعی که می خواهید در صف قرار دهید باید از یک فایل پایتون جداگانه وارد شود. ما آن را از وارد کرده ایم test_job.py:


def i_am_a_job(arg1):
    
    return arg1

اکنون که صف Redis و تابع تنظیم شده است، بیایید اسکریپت پایتون را اجرا کنیم:

$ python test.py

اجرای این دستور باید یک job اما ایجاد کند بدون خروجی. اگر خطایی دارید ، قبل از ادامه مراحل تنظیم را دوباره مرور کنید.

اگر همه چیز کار کرد، بیایید استفاده کنیم RQ-Dashboard برای مدیریت کارمان

مدیریت مشاغل Redis Queue با RQ-Dashboard

با استفاده می توانید وضعیت مشاغل خود را در یک صف بازرسی بازرسی کنید RQ-Dashboard، یک برنامه فلاسک سبک وزن که برای نظارت بر صف های Redis استفاده می شود. بیایید RQ Dashboard را برای نظارت بر شغلی که اخیراً ایجاد کرده ایم اجرا کنیم.

در یک جداگانه پایانه، به پوشه ای که مخزن را شبیه سازی کرده اید بروید. در آنجا، RQ-Dashboard را باز می کنیم:

$ . env/bin/activate
$ rq-dashboard
RQ Dashboard version 0.5.2
 * Serving Flask app 'rq_dashboard.cli' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running روی all addresses.
   WARNING: This is a development server. Do not use it in a production deployment.
 * Running روی http://192.168.1.10:9181/ (Press CTRL+C to quit)
192.168.1.10 - - (11/Jun/2021 15:30:12) "GET / HTTP/1.1" 200 -

می توانید به RQ-Dashboard دسترسی داشته باشید http://localhost:9181. وقتی پیوند را باز می کنید، متوجه می شوید که شغل شما هنوز در صف است و هنوز هیچ کارگری منصوب نشده است:

اسکرین شات RQ-Dashboard که برای اولین بار اجرا می شود، کارگر و یک کار ندارد

کارگران صف ردیس

کارگران یک کار را از صف انتخاب می کنند تا آنها را اجرا کنند. در دیگری پایانه (می توانید از اولی نیز استفاده کنید)، بیایید یک کارگر ایجاد کنیم:

$ . env/bin/activate 
$ rq worker --with-scheduler
15:42:38 Worker rq:worker:a33eb6277eda4969921cc8e3f1e857c0: started, version 1.8.1
15:42:38 Subscribing to channel rq:pubsub:a33eb6277eda4969921cc8e3f1e857c0
15:42:38 *** Listening روی default...
15:42:38 Trying to acquire locks for default
15:42:38 Cleaning registries for queue: default
15:42:38 Scheduler for default started with PID 1093
15:42:38 default: test_job.i_am_a_job(1) (b92bf928-48dd-4fb9-a551-427866c46a38)
15:42:38 default: Job OK (b92bf928-48dd-4fb9-a551-427866c46a38)
15:42:38 Result is kept for 500 seconds

کاری که شما ارسال کردید اجرا شد و نتیجه به مدت 500 ثانیه در Redis نگهداری می شود. علاوه بر اجرای فوری کارها، می توان کارها را نیز برای اجرا در آینده برنامه ریزی کرد، شبیه به کار CRON. دستور enqueue را می توان به صورت برنامه ریزی شده توسط:

job = queue.enqueue_at(datetime(2021, 7, 7, 13, 15), i_am_a_job, 1)

این عملیات عبارتند از اساس استفاده از صف های ردیس، نظارت بر آنها و تعیین کارگران. اکنون، بیایید یک برنامه کاربردی کوچک و کاربردی بنویسیم که تعداد آنها را می‌شمارد page بازدید می کند.

برنامه نمایشی صف Redis – شمارش بازدیدهای سایت

کد موجود در مخزن که قبلا دانلود کردید شامل یک برنامه Flask است:

from flask import Flask
from redis import Redis
from rq import Queue
from counter import visit

app = Flask(__name__)
q = Queue(connection=Redis())


@app.route('/visit')
def count_visit():
    count = q.enqueue(visit)
    return "Visit has been registered"


@app.route('/')
def return_visit_count():
    count = Redis().get('count').decode('utf-8') if Redis().get('count') else '0'
    return (f'<h1> Congrats! Your are the visitor no.: {count} </h1>')

در شما پایانه، بیایید این برنامه Flask را اجرا کنیم:

$ . env/bin/activate 
$ flask run

این برنامه Flask را در آن راه اندازی می کند app.py. این برنامه شامل دو مسیر است: / و /visit.

هر بار که http://localhost:5000/بازدید نقطه پایانی ضربه خورده است count کلید در Redis با 1 افزایش می یابد و صفحه وب زیر برگردانده می شود.

اسکرین شات تایید اولیه بازدیدکنندگان وب سایت page

تابع افزایش به عنوان یک کار در صف قرار می گیرد. تعداد بازدیدها در نقطه پایانی قابل مشاهده است: http://localhost: 5000 مانند:

اسکرین شات از وب سایتی که تعداد بازدیدکنندگان را نمایش می دهد

بیایید سعی کنیم از نقطه پایانی بازدید کنیم http://localhost:5000/بازدید سه بار. این کار ما را سه بار ارسال می کند. پس بیایید وضعیت مشاغل خود را بررسی کنیم روی RQ-Dashboard. بازدید کنید http://localhost:9181 و می توانید صفحه وب زیر را که مشاغل ما با موفقیت ارائه می شود ، مشاهده کنید اما هیچ کارگر آنها را پردازش نمی کند:

تصویر از Dashboard RQ که نشان دهنده شغل های جدید در حال اجرا است

برای شروع کار و برنامه ریزی redis queue ، دیگری را باز کنید پایانهو دستور start a worker را وارد کنید. مشاهده کنید که مشاغل ارسالی یکی پس از دیگری اعدام می شوند:

$ . env/bin/activate 
$ rq worker --with-scheduler
23:40:06 Worker rq:worker:f5a178b0931b42859699ce57696ed402: started, version 1.8.1
23:40:06 Subscribing to channel rq:pubsub:f5a178b0931b42859699ce57696ed402
23:40:06 *** Listening روی default...
23:40:06 Trying to acquire locks for default
23:40:06 Cleaning registries for queue: default
23:40:06 Scheduler for default started with PID 2889
23:40:06 default: counter.visit() (d23c4df8-d638-476b-b70a-dbb4b6f091f2)
23:40:06 default: Job OK (d23c4df8-d638-476b-b70a-dbb4b6f091f2)
23:40:06 Result is kept for 500 seconds
23:40:06 default: counter.visit() (f4ca10c4-16f2-4578-b1b7-67dfce3cee5a)
23:40:06 default: Job OK (f4ca10c4-16f2-4578-b1b7-67dfce3cee5a)
23:40:06 Result is kept for 500 seconds
23:40:06 default: counter.visit() (956b7b39-0b82-4ac6-b29e-fe3f0706431e)
23:40:06 default: Job OK (956b7b39-0b82-4ac6-b29e-fe3f0706431e)
23:40:06 Result is kept for 500 seconds

می توانید دوباره داشبورد را بررسی کنید و ممکن است متوجه شوید که مشاغل اجرا شده اند. این را می توان با اشاره به URL بررسی کرد روی مرورگر شما به http://localhost:9181. توجه کنید که کارگر اکنون در حال کار است و مشاغل با موفقیت پردازش شده است.

تصویر از Dashboard RQ که کار جدیدی را نشان می دهد که ثبت شده است

بیایید تعداد بازدیدها را با باز کردن یا طراوت برنامه بررسی کنیم روی http://localhost: 5000. Voilà! این page شمارنده بازدید 3 افزایش یافته است.

تصویر وب سایت شمارش بازدید کننده ، تعداد 3 از آخرین تصویر افزایش یافته است

به یک وب سایت با ترافیک زیاد فکر کنید و یک نفر مایل به نظارت بر بازدیدهای سایت و page بازدید می کند. در این حالت ، موارد متعدد این API تحت یک متعادل کننده بار سرو می شود و تعداد آنها بر اساس انجام می شود روی کارهای ارسال شده در صف به صورت ناهمزمان

نتیجه

در این مقاله، اهمیت صف‌های شغلی را بررسی کرده‌ایم و اینکه چگونه RQ و RQ-Dashboards می‌توانند به‌عنوان یک پشته صف کار حداقلی برای برنامه‌های وب شما عمل کنند. مثال عملی را می توان به سایر برنامه های کاربردی دنیای واقعی که در آن امکانات بی پایان است، گسترش داد.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-10 05:11:03

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید