How to use Celery to implement distributed task scheduling

王林
Release: 2023-08-02 08:53:18
Original
1519 people have browsed it

How to use Celery to implement distributed task scheduling

Overview:
Celery is one of the most commonly used distributed task queue libraries in Python, which can be used to implement asynchronous task scheduling. This article will introduce how to use Celery to implement distributed task scheduling, and attach code examples.

  1. Installation and Configuration of Celery

First, we need to install the Celery library. Celery can be installed through the following command:

pip install celery
Copy after login

After the installation is complete, we need to create a Celery configuration file. Create a file called celeryconfig.py and add the following content:

broker_url = 'amqp://guest@localhost//'     # RabbitMQ服务器地址
result_backend = 'db+sqlite:///results.sqlite'   # 结果存储方式(使用SQLite数据库)
task_serializer = 'json'    # 任务序列化方式
result_serializer = 'json'  # 结果序列化方式
accept_content = ['json']   # 接受的内容类型
timezone = 'Asia/Shanghai'  # 时区设置
Copy after login
  1. Create Celery App

In the code we need to import Celery library and create a Celery application. Here is an example:

from celery import Celery

app = Celery('mytasks', include=['mytasks.tasks'])
app.config_from_object('celeryconfig')
Copy after login

In the above code, we create a Celery application named mytasks and apply the configuration in celeryconfig.py into the Celery application.

  1. Create a task

Next, we need to create a task. A task is an independent function that can perform individual operations. Here is an example:

# tasks.py
from mytasks import app

@app.task
def add(x, y):
    return x + y
Copy after login

In the above code, we have defined a task named add to calculate the sum of two numbers.

  1. Start Celery Worker

To enable distributed execution of tasks, we need to start one or more Celery Workers to process tasks. Celery Worker can be started through the following command:

celery -A mytasks worker --loglevel=info
Copy after login

After the startup is completed, Celery Worker will listen and process tasks in the queue.

  1. Submitting tasks

In other code, we can submit tasks to the Celery queue. Here is an example:

# main.py
from mytasks.tasks import add

result = add.delay(4, 6)
print(result.get())
Copy after login

In the above code, we import the add task defined previously and then submit a task using the delay method. The delay method will return an AsyncResult object, and we can get the result of the task by calling the get method.

  1. Monitoring task completion status

We can use the AsyncResult object to monitor the execution status of the task. The following is an example:

# main.py
from mytasks.tasks import add

result = add.delay(4, 6)
while not result.ready():
    print("Task is still running...")
    time.sleep(1)

print(result.get())
Copy after login

In the above code, we monitor the execution status of the task through a loop. readyThe method will return a Boolean value indicating whether the task has been completed.

Summary:
This article briefly introduces how to use Celery to implement distributed task scheduling. By installing and configuring Celery, creating a Celery application, defining tasks, starting Celery Workers, and submitting tasks to the queue, we can implement distributed task scheduling. Using Celery can improve task execution efficiency and is suitable for situations where parallel computing or asynchronous processing is required.

The above is the detailed content of How to use Celery to implement distributed task scheduling. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template