乐趣区

Django项目中使用Celery

官方参考文档:https://docs.celeryproject.or…

注意:Celery 4.0 支持 Django 1.8 和更高版本。对于 Django 1.8 之前的版本,请使用 Celery 3.1。

安装

pip install celery

项目结构

-- proj/
  -- manage.py
  -- proj/
      -- __init__.py
      -- settings.py
      -- urls.py
  -- myapp/
    -- __init__.py
    -- apps.py
    -- views.py
    -- models.py

第一步

proj/proj/ 下新建一个 celery.py 模块,编写如下代码:

import os
from celery import Celery
from __future__ import absolute_import, unicode_literals

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')  # 设置 django 环境

app = Celery('proj')

app.config_from_object('django.conf:settings', namespace='CELERY')  # 使用 CELERY_ 作为前缀,在 settings 中写配置

app.autodiscover_tasks()  # 发现任务文件每个 app 下的 task.py

第二步

proj/proj/__init__.py 文件下导入上面创建的模块,代码如下:

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ['celery_app']

第三步

myapp/ 下创建自己的任务模块 tasks.py,编写任务函数并用@shared_task 装饰,代码如下:

from __future__ import absolute_import, unicode_literals
from celery import shared_task

@shared_task
def async_func():
    pass

第四步

存储任务执行结果,不需要的可忽略这步。

  • 安装 django-celery-results
pip install django-celery-results
  • 添加 django-celery-results 到项目的 settings
INSTALLED_APPS = (
    ...,
    'django_celery_results',
)
  • 执行数据库迁移创建 Celry 数据表
python manage.py migrate django_celery_results
  • 配置 Celery 使用 django_celery_results 后端
CELERY_CACHE_BACKEND = 'celery'

CACHES = {
    'celery': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'celery_cache',
    }
}

在视图函数中发起异步任务启动命令

# proj/proj/views.py
from .tasks import celery_func

def send_smscode(request):
    ... ...
    func.delay()  # 执行异步任务
    return Response({"message": "OK"})

启动 Celery 工作进程

celery -A proj worker -l info
退出移动版