Рубрики
Без рубрики

Понимание сельдерея и создавая простую задачу в Джангу

Целью этого поста понять, что сельдерей создает простую задачу в проекте Django (Celer … Теги с Python, Django.

Цель этого поста

  1. Понять, что такое сельдерей
  2. Создайте простую задачу в проекте Django (сельдерей)

Что такое сельдерей?

Сельдерей – это асинхронный обработка и Планирование Инструмент в Джангу (не ограничен django).

Так что такое асинхронный? Когда клиент отправляет запрос на сервер, обычно клиент ничего не может ничего делать, пока не получает ответ с сервера. То, что сказал, когда запрос – это трудоемкая работа, я имею в виду более 1 минуту, чтобы справиться, Пользователь начнет нажать кнопку «Обновить пару раз» или нажмите на кнопку «Назад».

Чтобы предотвратить эту ситуацию, мы обрабатываем API асинхронно. Асинхронная обработка позволяет клиентам отправлять запросы и немедленно выполнять другие задачи. Когда возвращает ответ, обработка ответа продолжается.

Эта асинхронная обработка осуществляется сельдереем.

Как насчет планирования? Вы можете сделать задачу, которая работает в 8 часов каждое утро. Или вы также можете отправить электронные письма для пользователей каждую пятницу в 4:00 вечера. Это возможно с избиением сельдерея.

Как работает сельдерей? Единица работы, с которой сельдерей должен иметь дело, называется задачей. Производитель (сельдерей) создает задачу, и задача добавляется в очередь задач до его выполнения. Затем брокер пересылает задачу в очередь задачи на соответствующий узел работника, который является потребителем (сельдерей), где выполняется задача. Сереререй можно рассматривать как большую концепцию, включая производителя, брокеров и потребитель.

Давайте создадим простую задачу!

  1. Подготовьте проект Django (любой проект в порядке – вы можете просто использовать https://docs.djangoproject.com/en/3.1/intro/tutorial01/ Если вы не знаете, с чего начать)

  2. Установите и запустите rabbitmq. (Я использовал доморожение) Попробуйте https://www.rabbitmq.com/install-homebrew.html. Если у вас еще нет rabbitmq. Brew Services Начните Rabbitmq начать rabbitmq

  3. Установите сельдерей в виртуальной среде Пип Установите сельдерей

  4. Создать новое приложение для сельдерея Python Manage.py StartApp Djangocelery <- Вы можете назвать ваше приложение что угодно. Я позвонил мою Djangocelery

  5. Настройки и больше 5-1 Создать Celery.py Djangocelery Приложение (каталог) и добавить следующий код

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'betweak.settings') 
app = Celery('djangocelery') 

# You can add celery settings in settings.py starting with CELERY_ 
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks(lambda : settings.INSTALLED_APPS)

5-2. Редактировать djangocelery> init .py файл

from .celery import app as celery_app
# celery app is automatically imported when django starts
__all__ = ['celery_app']

5-3. Редактировать настроек .py

INSTALLED_APPS = [

   ...
   'celery'
   'djangocelery' # newly created app
]

# set CELERY settings with CELERY_{}
CELERY_BROKER_URL = amqp://guest:guest@localhost:5672/ # rabbitmq setting
CELERY_TIMEZONE = 'Asia/Seoul'
CELERY_ENABLE_UTC=False
CELERY_TASK_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT = ['json']

6 . Миграция базы данных Python Mange.py мигрирует

7 . Создать задание

Создайте файл task.py в djangocelery и добавьте следующий код

from djangocelery.celery import app

@app.task(name="mod", bind=True, default_retry_delay=10, max_retries=5)
def mod(self, x, y):
    try:
        z = x % y
        print(f'{x} % {y} = {x%y}')
        return z
    except :
        mod.retry()
        print(f'Error with mod')

8 . Добавить представления, чтобы мы могли получить доступ к задаче с API

Djangocelery> Просмотр

from django.http import HttpResponse
from rest_framework.decorators import api_view
from djangocelery.tasks import mod

@api_view(['GET'])
def get_test_add(request):
    x, y = int(request.query_params.get('x')), int(request.query_params.get('y'))
    mod.apply_async(args=(x, y), countdown=20)
    return HttpResponse(f'Success !')

Сельдерея Django> Urls.py

from django.urls import path

from djangocelery import views

urlpatterns = [
    path('mod', views.get_test_add)
]

BetWeak> URLS.PY (URL проекта)

urlpatterns = [
    path('celery/', include('djangocelery.urls')),
    path('admin/', admin.site.urls),
]

ОК, поэтому настройки готовы. Давайте проверим это!

Выпускать сельдерей

Celery – Djangocelery Рабочий работник Loglevel-info

Беги Django (в другом терминале)

Python Manage.py Runserver

Давайте проверим бревно сельдерея, чтобы увидеть, что происходит.

Мы видим, что в 22:32:33 получена задание. Примерно через 20 секунд спустя в 22:32:54 задача преуспела.

Если мы увидим djangocelery> просмотреть.

ffrom djangocelery.tasks import mod
@api_view(['GET'])
def get_test_add(request):

    # so we get the x and y values from the url
    x, y = int(request.query_params.get('x')), int(request.query_params.get('y'))

    # Here countdown=20 means executes in 20 seconds from now 
    mod.apply_async(args=(x, y), countdown=20)
    return HttpResponse(f'Success ! ')

Ну, это было легко?

Давайте попробуем ошибку. Мы пройдем 0 значение для y. Python поднимает, когда мы пытаемся использовать 0 для модуля.

Давайте проверим выйти

Там есть много. Мы видим, что был ZerodivisionError, и задача повторилась 5 раз!

Djangocelery> Task.py.

# Here are the settings for retries!!
@app.task(name="mod", bind=True, default_retry_delay=10, max_retries=5)
def mod(self, x, y):
    try:
        z = x % y
        print(f'{x} % {y} = {x%y}')
        return z
    except :
        mod.retry()
        print(f'Error with add')

Так что это для того, чтобы начать с сельдереем в Джангу:)

Оригинал: “https://dev.to/daeenchoi/understanding-celery-and-creating-simple-task-in-django-3gdk”