Home  >  Article  >  Backend Development  >  How to integrate Celery and Redis in Django to implement asynchronous task processing

How to integrate Celery and Redis in Django to implement asynchronous task processing

王林
王林Original
2023-09-28 17:40:52961browse

How to integrate Celery and Redis in Django to implement asynchronous task processing

How to integrate Celery and Redis in Django to implement asynchronous task processing

Introduction:
In web applications, there are many time-consuming tasks, such as Send emails, process images, generate reports, and more. If these tasks are processed synchronously, it will seriously affect the user experience, so an asynchronous task processing system needs to be used.

Django is a popular Python Web framework, and Celery is an open source distributed task queue system that provides asynchronous task processing solutions. In order to implement asynchronous task processing, we also need to use Redis as Celery's message broker.

This article will introduce how to integrate Celery and Redis in Django to achieve asynchronous task processing. The following will be divided into four parts to explain: installation and configuration, creating tasks, calling tasks, and monitoring tasks.

1. Installation configuration

  1. Install Celery and Redis
    Use the pip command to install Celery and Redis:

    pip install celery redis
  2. Configure Django settings
    Add the following configuration in the settings.py file of the Django project:

    # Celery配置
    CELERY_BROKER_URL = 'redis://localhost:6379/0'
    CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

    The configuration here specifies the use of Redis as the message broker and result storage.

  3. Start Celery Worker
    Create a file named celery.py in the root directory of the Django project and add the following content:

    from celery import Celery
    import os
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
    
    app = Celery('project')
    app.config_from_object('django.conf:settings', namespace='CELERY')
    app.autodiscover_tasks()

    The function is to create a Celery instance and load the configuration of the Django project.

Run the following command in the terminal to start Celery Worker:

celery -A project worker --loglevel=info

2. Create tasks

  1. Create tasks.py file
    Create a file named tasks.py in an app directory of the Django project and add the following content:

    from celery import shared_task
    
    @shared_task
    def add(x, y):
     return x + y

    A task named add is defined here, which receives two parameters. x and y, and return their sum.

3. Calling tasks
Celery tasks can be called in Django’s view function or elsewhere in the following ways:

from app.tasks import add

result = add.delay(1, 2)

The delay() method and parameters are used here Call the add task and save the result in the result variable.

4. Monitoring tasks
To monitor the execution of tasks in Django, you can use the Flower tool provided by Celery. You can install and configure it through the following steps:

  1. Install Flower
    Use the pip command to install Flower:

    pip install flower
  2. Start Flower
    Run the following command in the terminal to start Flower:

    celery flower --broker=redis://localhost:6379/0
  3. Access Flower
    Visit http://localhost:5555 in the browser to enter the Flower monitoring interface, where you can monitor the execution of the task. , view task details, etc.

Summary:
Through the above steps, we can integrate Celery and Redis in Django to implement asynchronous task processing. When developing web applications, asynchronous task processing can greatly improve user experience and system performance, so it has extensive application value in actual projects. At the same time, by monitoring the execution of tasks, we can promptly discover and solve problems in task processing to ensure the stability and reliability of the system.

The above is the detailed content of How to integrate Celery and Redis in Django to implement asynchronous task processing. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn