Django集成Celery到项目
本节将celery集成到Django项目中,实现异步任务处理和定时任务处理
Celery工作流程
Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成。
消息中间件
Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis, MongoDB (experimental), Amazon SQS (experimental),CouchDB (experimental), SQLAlchemy (experimental),Django ORM (experimental), IronMQ
任务执行单元
Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。
任务结果存储
Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, Redis,memcached, MongoDB,SQLAlchemy, Django ORM,Apache Cassandra, IronCache
1 Celery安装与配置
在虚拟环境中安装:
pip install django-celery==3.2.2
pip install django-redis
pip install flower # celery 的web管理平台(异步任务可视化)
查看集成到Django中的celery版本, pip freeze
celery==3.1.26.post2 django-celery==3.2.2 flower==0.9.2
启动redis服务, 端口假设为6379
发现pip安装比较慢的情况
2 Django中配置
(1)在主工程的配置文件settings.py 中应用注册表INSTALLED_APPS中加入 djcelery
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'art',
'xadmin',
'crispy_forms',
'DjangoUeditor',
'djcelery', #加入djcelery
]
(2) 在settings.py 中加入celery配置信息
#############################
# celery 配置信息 start
#############################
import djcelery
djcelery.setup_loader()
BROKER_URL = 'redis://127.0.0.1:6379/1'
CELERY_IMPORTS = ('art.tasks')
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
from celery.schedules import crontab
from celery.schedules import timedelta
CELERYBEAT_SCHEDULE = { #定时器策略
#定时任务一: 每隔30s运行一次
u'测试定时器1': {
"task": "art.tasks.tsend_email",
#"schedule": crontab(minute='*/2'), # or 'schedule': timedelta(seconds=3),
"schedule":timedelta(