1、说明
- 版本: `celery==5.27
- 基于在django中
2、流程
- 配置celery
- 创建
celery
应用对象 - 定义
celery
任务 - 调用
celery
任务
3、目录结构(按需设置)
Myproject/
|-- project/
| |-- __init__.py
| |-- settings.py
|-- celery_tasks/
| |-- __init__.py
| |-- celery.py
| |-- config.py
| |-- tasks.py
|-- ...
celery.py
:celery
应用config.py
:celery
配置项,也可以放到settings
中配置。tasks.py
:任务文件
4、配置celery
celery.py
:
CELERY_BROKER_URL = 'amqp://guest@localhost//'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERY_BROKER_URL
:消息代理,消息队列的地址。amqp
协议,即rabbitmq
,本地guest用户。CELERY_RESULT_BACKEND
:任务结果存储后端,本地redis
CELERY_ACCEPT_CONTENT
:celery可以接收的数据类型CELERY_TASK_SERIALIZER
:任务序列化CELERY_RESULT_SERIALIZER
:结果序列化CELERY_TIMEZONE
:
ps
:我用的rabbitmq
作为消息代理,为了方便,你可以用redis
CELERY_BROKER_URL = 'redis://localhost:6379/0'
5、创建 celery
应用
celery.py
from celery import Celery
from django.conf import settings
import os
import sys
import django
# 将项目根目录添加到 Python 的模块搜索路径中
back = os.path.dirname
BASE_DIR = back(back(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
# 设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'blogproject.settings.production')
# 实例化Celery
app = Celery('celery_tasks')
# 配置celery
app.config_from_object("celery_tasks.config")
# Celery加载任务
app.autodiscover_tasks(['celery_tasks'])
# 可以从INSTALLED_APPS加载任务。
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
- 由于
celery
是独立的项目,所以必须导入django
环境 app = Celery('celery_tasks')
创建了一个名为'celery_tasks'
的 Celery 应用程序实例,它是与 Celery 相关的任务处理的核心对象。这个实例将被用于管理和执行与 celery 相关的任务。通过这个实例,您可以配置和管理各种 Celery 的功能,比如任务队列、调度器、任务结果等。- 加载配置:指定从
celery_tasks
下的config
文件中配置。 - Celery加载任务:指定在
celery_tasks
下发现任务。
6、定义celery
任务
tasks.py:
from django.core.mail import send_mail
from celery import shared_task
@shared_task
def add(x, y):
print(x + y)
- 用装饰器
shared_task
将一个普通函数装饰器celery
任务
7、调用celery
任务
在需要的地方,使用 add.delay()
将任务加入任务队列。
8、在settings中配置celery
说明:截止到第7小节,celery一个完整的使用已结束。这里说一下配置项配置在settings.py
该怎么办。定义和调用任务都是一样的,配置项也是一样的,无非移到了django配置文件中。主要差别在于创建celery
应用时。
app.config_from_object('django.conf:settings', namespace='CELERY')
9、自动发现任务
发现任务除了可以指定路径外,还可以从INSTALLED_APPS加载任务。将celery_tasks
注册为app,然后发现任务更改为:
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
Celery
会自动搜索您项目中的每个 Django
应用,查找名为 tasks.py
的模块,然后加载其中定义的 Celery 任务。
当然,方式不是死的,可以按照自己的需求或者意愿来组合
评论列表,共 0 条评论
暂无评论