官方参考文档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

hukang
18 声望6 粉丝

一名热爱技术的上进小青年。