Celery笔记四之在Django中使用celery
这一篇笔记介绍一下如何在 Django 系统中使用 celery。
如果是想纯粹使用 celery,这一篇笔记可以略过。
本篇笔记目录如下:
- 文件配置
- task 定义
- 运行 worker
1、文件配置
我们这里使用前面的创建的 hunter Django 系统。
我们需要在 settings.py 所在的文件夹下配置如下几个文件:
hunter/hunter/
/__init__.py
/celery.py
/settings.py
其中,celery.py 文件是我们需要新建的,其他的两个我们需要新增一点配置项。
以下是 celery.py 文件内容:
# hunter/hunter/celery.py
import os
from celery import Celery
# 为 celery 程序设置默认的 Django 配置
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'hunter.settings')
app = Celery('hunter')
# 表示从 Django 的配置中加载 celery 的配置,namespace='CELERY' 表示 celery 的配置必须是以 'CELERY' 为前缀
app.config_from_object('django.conf:settings', namespace='CELERY')
app.conf.update(
task_ignore_result=True
# 我们需要设置的定时任务 或者 延时任务都可以在对应的 application 下定义,task 的定义我们在下面介绍
# 然后通过下面的命令自动发现对应的任务
# 比如想要在 blog 下设置一个延时任务,可以创建 blog/tasks.py,然后 celery 就可以自己发现对应的任务
app.autodiscover_tasks()
在 Django 的 celery.py 里,不一样的是,os.environ.setdefault() 函数设置了一个 Django 的配置
对 Celery() 实例化的时候,用到的是 Django 的系统名称 hunter
而这里使用到的 config_from_object() 用到的值是 'django.conf:settings',namespace 的值是 'CELERY',表示在 settings.py 中所有 CELERY 开头的值都可以被捕捉到并作为 celery 的配置项,这个我们等下介绍。
最后面有一个 app.autodiscover_tasks() 表示Django 系统将会自动获取 Django 系统下各个 application 的 tasks.py 的 task。
以上就是一个最基本的使用模板。
settings.py
在 settings.py 中的配置如下:
CELERY_ENABLE_UTC = False
CELERY_TIMEZONE = "Asia/Shanghai"
CELERY_BROKER_URL = "redis://localhost/0"
CELERY_RESULT_BACKEND = "redis://localhost/1"
其中,所有的关于 celery 的配置都需要加上 CELERY_ 的前缀,参数值的定义和之前 celeryconfig.py 中的定义方式是一致的。
还有很多其他的配置项对应值,详见下面的链接: celery配置项
除此之外,为了确保 celery 的 app 在 Django 运行的时候被加载,我们还需要在 hunter/hunter/ init .py 中引入 celery_app。
# hunter/hunter/__init__.py
from .celery import app as celery_app
__all__ = ('celery_app',)
这样,每个 application 下的 tasks.py 中被 @shared_task 修饰的延时或定时任务就可以使用了。
2、task 定义
假设我们还是沿用之前的 application,命名为 blog,我们在这个文件夹下创建一个 tasks.py,内容如下:
# blog/tasks.py
from celery import shared_task
@shared_task
def test_add(x, y):
return x + y