异步任务(Celery)
Celery 是一个任务队列,可以运行后台或预定的作业,并与 Django 很好地集成。Celery 需要一些称为消息代理的东西来将消息从调用传递给 worker。这个消息代理可以是 redis,rabbitmq 甚至是 Django ORM / db,尽管这不是推荐的方法。
在开始使用该示例之前,你必须配置芹菜。要配置 celery,请在主应用程序中创建一个 celery_config.py
文件,与 settings.py
文件并行。
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings
# broker url
BROKER_URL = 'redis://localhost:6379/0'
# Indicate Celery to use the default Django settings module
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
app = Celery('config')
app.config_from_object('django.conf:settings')
# if you do not need to keep track of results, this can be turned off
app.conf.update(
CELERY_RESULT_BACKEND=BROKER_URL,
)
# This line will tell Celery to autodiscover all your tasks.py that are in your app folders
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
并在主应用程序的 __init__.py
文件导入芹菜应用程序。像这样
# -*- coding: utf-8 -*-
# Not required for Python 3.
from __future__ import absolute_import
from .celery_config import app as celery_app # noqa
要运行 celery worker,请在 manage.py 所在的级别使用此命令。
# pros is your django project,
celery -A proj worker -l info