Планирование асинхронных многопоточных задач в Django с помощью Celery

Управление задачами в веб-приложении может стать сложным, особенно когда вам нужно выполнять трудоемкие операции асинхронно. Django, популярный веб-фреймворк, можно расширить с помощью Celery для эффективной обработки асинхронных задач. В этой записи блога мы рассмотрим, как настроить периодическое планирование задач с помощью Celery в приложении Django. Это позволяет вашему приложению запускать фоновые задачи с указанными интервалами и разгружать обработку задач из основных потоков приложения.
1. Установите Celery и Django Celery Beat
Путешествие начинается с установки Celery и django-celery-beat. Это основные компоненты для планирования и выполнения задач в Django. Вы можете установить их с помощью pip:
pip install celery django-celery-beat
2. Настройте сельдерей
После установки Celery вам необходимо настроить его для работы с вашим приложением Django. Начните с создания файла с именем celery.py в главном каталоге вашего проекта. Этот файл инициализирует Celery и свяжет его с настройками Django.
from celery import Celery import os # Set the default Django settings module for the 'celery' program. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project_name.settings') app = Celery('your_project_name') # Using a string here means the worker will not have to serialize # the configuration object to child processes. app.config_from_object('django.conf:settings', namespace='CELERY') # Load task modules from all registered Django apps. app.autodiscover_tasks()
Чтобы гарантировать загрузку этой конфигурации при запуске Django, импортируйте приложение Celery в your_project_name/__init__.py файл:
from .celery import app as celery_app __all__ = ('celery_app',)
3. Обновите настройки Django
Далее интегрируйте Celery с настройками Django, обновив settings.py файл. Это включает в себя указание вашего брокера и бэкэнда результата, который может быть RabbitMQ или Redis.
CELERY_BROKER_URL = 'redis://localhost:6379/0' # or 'amqp://localhost//' for RabbitMQ CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' CELERY_TIMEZONE = 'UTC' from celery.schedules import crontab CELERY_BEAT_SCHEDULE = { 'task-name': { 'task': 'myapp.tasks.task_function', 'schedule': crontab(minute=0, hour=0), # Executes daily at midnight }, }
4. Определите свою задачу
Теперь пришло время определить, какими должны быть ваши задачи. Создайте tasks.py файл в вашем приложении Django (например, myapp ) и добавьте свою функцию задачи.
from celery import shared_task @shared_task def task_function(): # Logic for your asynchronous, multithreaded task print("Task is executing")
Здесь, @shared_task — декоратор, предоставляемый Celery, который помечает функцию как вызываемую задачу.
5. Запустите Celery Worker и побейте
Наконец, вам нужно запустить Celery Worker и Beat, чтобы начать обработку задач и планирование их в соответствии с вашей конфигурацией.
# Start Celery Worker celery -A your_project_name worker -l info # Start Celery Beat celery -A your_project_name beat -l info
Эти команды запускают worker для обработки асинхронных задач и beat-процесс для управления периодическими задачами. Убедитесь, что ваш брокер сообщений, такой как Redis или RabbitMQ, запущен перед выполнением этих команд.
Выполнив эти шаги, вы оснастили свое приложение Django для эффективной обработки периодических асинхронных задач, повысив производительность и отзывчивость вашего приложения. Celery — мощный инструмент, и с этой настройкой вы готовы исследовать более сложные идеи обработки задач.
Дисклеймер о повторной публикации: Этот контент защищен авторским правом, и все права принадлежат автору. Вы можете перепостить или поделиться этой страницей, но, пожалуйста, обеспечьте указание ясной ссылки на оригинальный источник с гиперссылкой на эту страницу. Спасибо за уважение к нашему контенту!
Была ли эта статья полезной?
Полезным это сочли 196 из 196
John Tanner
ОсновательЯ высококвалифицированный разработчик программного обеспечения с более чем 20-летним опытом работы в кроссплатформенной full-stack разработке. Я специализируюсь на проектировании и управлении архитектурой крупномасштабных проектов, а также на упрощении сложных систем. Мои навыки включают разработку на Python, Rust и Django. У меня есть глубокая компетенция в блокчейн-технологиях, искусственном интеллекте, системах с высокой степенью параллелизма, сборе данных из приложений и веб-страниц, разработке API, оптимизации баз данных, контейнеризации проектов и развертывании в производственных средах.
Контакт John TannerСвязанный пост:
- Создание многоязычного веб-сайта с Django: лучшие практики и стратегии SEO
- Как создать успешный зарубежный независимый веб-сайт для внешней торговли: всестороннее руководство от исследования рынка до SEO-оптимизации
- Услуги по разработке на Django
- Создание приложений на основе искусственного интеллекта с использованием Django
- Раскрытие потенциала Django: лучший фреймворк для серверной разработки