Celery的主要特点之一是其能够进行异步任务处理。这意味着您可以安排任务在未来的某个时间点执行,而不会阻塞您的主程序或应用程序。您可以使用Celery将复杂的工作流程分解为多个小任务,这些任务可以在多个工作者或服务器之间进行分发和处理。这使得Celery特别适合需要大规模并行处理的应用程序。celery官方文档:https://docs.celeryq.dev/en/stable/index.html
在Celery中,主要有三个组件,分别是生产者(Producer)、消费者(Worker)和消息队列(Broker)。
生产者:向消息队列发送任务的部分,通常是主应用程序(Django项目),比如我们的代码中生产了一个发送邮件的任务。
消息队列:也被称为Broker,是一个在生产者和消费者之间传递消息的中介。当生产者发送一个任务时,这个任务将被放入消息队列中,等待消费者来取出并执行。一般使用Redis、RabbitMQ来作为消息队列。
消费者:也就是我们通常所说的Worker,是从消息队列中取出任务并执行的部分。在Celery中,可以有多个Worker同时工作,每个Worker可以运行在不同的服务器或进程中,以实现任务的并行处理。

Celery生产者与消费者模式工作原理

Django和Redis工作流程
通过以下命令即可安装:
pip install -U "celery[redis]"
首先在/oaback/oaback/celery.py 中添加以下代码:
import os
from celery import Celery
from celery.signals import after_setup_logger
import logging
# 设置django的settings模块,celery会读取这个模块中的配置信息
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'oaback.settings')
app = Celery('oaback')
## 日志管理
@after_setup_logger.connect
def setup_loggers(logger, *args, **kwargs):
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# add filehandler
fh = logging.FileHandler('logs.log')
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
logger.addHandler(fh)
# 配置从settins.py中读取celery配置信息,所有Celery配置信息都要以CELERY_开头
app.config_from_object('django.conf:settings', namespace='CELERY')
# 自动发现任务,任务可以写在app/tasks.py中
app.autodiscover_tasks()
# 测试任务
@app.task(bind=True, ignore_result=True)
def debug_task(self):
print(f'Request: {self.request!r}')