Celery Django

Celery 3.1之后的版本原生支持django1.8及更高。

推荐用法

目录结构

- proj/
  - proj/__init__.py
  - proj/settings.py
  - proj/urls.py
- manage.py

在项目下创建一个celery.py(和项目配置文件settings.py同级)

from __future__ import absolute_import, unicode_literals
# 使用绝对包含路径
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
# 设置django运行时需要的环境变量

app = Celery('proj')  # 传入的应该是项目名称

app.config_from_object('django.conf:settings', namespace='CELERY')
# 读取django 的配置信息,使用 'CELERY_' 开头的即为celery的配置

app.autodiscover_tasks()  # 自动发现在installed apps中包含的task(需要在tasks.py中定义)这样就不用手动的在CELERY_IMPORTS中添加设置

@app.task(bind=True)  # dumps its own request information
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

在项目的init.py文件中增加:

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

__all__ = ['celery_app']

在每个django app中即可加task,例如demoapp:

demoapp/tasks.py:

# Create your tasks here
from __future__ import absolute_import, unicode_literals
from celery import shared_task

@shared_task
def add(x, y):
    return x + y

启动工作进程

celery -A proj worker -l info
# 这边指定的proj即为django项目名称,需要像manage.py一样使用

增加结果保存

pip install django-celery-results

增加 django-celery-results 到installed apps中

python manage.py migrate django_celery_results

在django的配置文件中增加设置,说明使用django来进行结果保存:

CELERY_RESULT_BACKEND = 'django-db'

django-celery-beat – Database-backed Periodic Tasks with Admin interface.

转载自:https://blog.csdn.net/weixin_34001430/article/details/88224203

You may also like...