В начале моих статей я написал о использовании сельдерея, но не написал, как его установить и настраивать.
Подготовить
- У вас проект Django
- Вы хотите подключить проект с
сельдерей
Краткое описание
- Установить брокер (
redis
) глобально - Установить
Сельдерей питон
библиотека - Настройка сельдерея в
настройки
- Написать
Асинхронизация
функция - Запустить сельдерей
Деталь
- Установить
Redis
:
sudo apt install redis-server
Проверять:
➜ ~ redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379>
- Установить
сельдерей
:
pip install celery
- Создать файл конфигурации. Пожалуйста, не назовите в
сельдерей
Потому что могут быть имена конфликты. Например,run_celery.py
:
from __future__ import absolute_import, unicode_literals import os from celery import Celery from django.conf import settings os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings') app = Celery('my_celery_application') app.config_from_object('django.conf:settings')
settings.py
BROKER_URL = 'redis://127.0.0.1:6379/0' CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379' CELERY_ACCEPT_CONTENT = ['application/json'] CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER = 'json'
- Проверить все:
(ienv) ➜ project git:(master) ✗ celery -A run_celery worker -l info -------------- celery@MacBook-Pro-User1.local v5.0.2 (singularity) --- ***** ----- -- ******* ---- macOS-10.16-x86_64-i386-64bit 2021-02-14 13:26:14 - *** --- * --- - ** ---------- [config] - ** ---------- .> app: ptt:0x7fe9f133c2e0 - ** ---------- .> transport: redis://127.0.0.1:6379/0 - ** ---------- .> results: redis://127.0.0.1:6379/ - *** --- * --- .> concurrency: 8 (prefork) -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) --- ***** ----- -------------- [queues] .> celery exchange=celery(direct) key=celery [tasks] . apps.centrifuge.centrifuge.send_sms_async
- Напишите вам Async Task:
from run_celery import app from django.conf import settings from .models import PhoneCode @app.task def send_sms_async(identifier: int): code = PhoneCode.objects.filter(pk=identifier).first() if code: provider: SMSProviderBase = Test() provider.send_private_sms(code.phone, code.code)
Вывод
- Сельдерей с Redis (или другим бэкэнд) – хороший способ для ваших асинхронных проектов Django
- Вы можете создать столько задач, сколько хотите
- Вы можете выбрать класс для задач сельдерея
- Чтобы контролировать использование Цветок Чтобы контролировать свои асинхронные задачи
- Запустить сельдерей через Supervisor (
-B
– Использовать периодические задачи):
[program:example-celery] command =/bin/celery --app=run_celery:app worker --loglevel=INFO -B directory = user = stdout_logfile = logs/celery.log redirect_stderr=true environment = LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8
Спасибо за чтение
Оригинал: “https://dev.to/a1k89/how-to-install-and-configure-celery-for-django-4o8e”