celery 4.2版本 Redis2.10版本
- 安装 pip install celery,Redis作为中间人,安装2版本,3会报错,在Windows下测试还需安装 pip install eventlet
- settings中配置Redis为中间人,作为任务的接受者
CELERY_BROKER_URL = 'redis://localhost:6379/2' #: Only add pickle to this list if your broker is secured #: from unwanted access (see userguide/security.html) CELERY_ACCEPT_CONTENT = ['json'] CELERY_RESULT_BACKEND = 'redis://localhost:6379/3' CELERY_TASK_SERIALIZER = 'json'
1.在项目目录下创建celery.py文件,内容如下
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dailyfresh.settings')
app = Celery('dailyfresh')
app.config_from_object('django.conf:settings', namespace='CELERY')
# Load task modules from all registered Django app configs.
app.autodiscover_tasks()
# @app.task(bind=True)
# def debug_task(self):
# print('Request: {0!r}'.format(self.request))
2.配置settings同级目录下__init__.py文件
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ('celery_app',)
3.在应用目录下创建tasks.py文件,必须是次文件名,celery会找项目中所有tasks.py文件
from __future__ import absolute_import, unicode_literals
from celery import shared_task
from dailyfresh import settings
from django.core.mail import send_mail
@shared_task
def send_register_email(username, token, email):
message = ''
title = '天天生鲜欢迎信息'
body = '<h1>{name},欢迎成为天天生鲜会员</h1>请点击下面链接激活账号<a href="http://127.0.0.1:8000/user/register/active/{token}">http://127.0.0.1:8000/user/register/active/{token}</a>'.format(
name=username, token=token)
try:
send_mail(title, message, settings.EMAIL_FROM, [email], html_message=body)
except Exception as e:
print(e)
4.发出celery请求
send_register_email.delay(username, token, email)
5.处理请求
celery -A dailyfresh worker -l info -P eventlet