欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

django中celery服务器和django分离的一种使用方法

程序员文章站 2022-07-15 14:10:09
...
" http://www.celeryproject.org/ "  官网英文版本

" http://docs.jinkan.org/docs/celery/"  官方中文版本



"客户端=>生产者"                                                                                                 "worker=>消费者"

                                                            broker=> 被观察者                                    worker => 观察者                                    

django中celery服务器和django分离的一种使用方法


1.django 项目中建立一个包 命名为 celery_tasks(个人癖好而定)

2.celery_tasks 包中创建一个 task.py 文件


# 1.参数1指定任务所在的路径从包名开始
# 2.参数2指定任务队列broker,可以作为任务队列的有多种,此处以redis数据库为例
celery_client = Celery("celery_tasks.tasks", broker="redis://127.0.0.1:6379/4")

"生产者"                                                    "消费者"
# 1.参数1指定任务所在的路径从包名开始
# 2.参数2指定任务队列broker,可以作为任务队列的有多种,此处以redis数据库为例

# 3.生产任务 就是函数

"生产者"                                                    "消费者"

# django初始化不然找不到settings 复制一份项目到另外一台服务器,

##################这段代码只在celery服务器上存在####################"

import os
os.environ["DJANGO_SETTINGS_MODULE"] = "django项目的根目录名称.settings"
# 放到Celery服务器上时添加的代码
import django
django.setup()
import time
# 创建celery对象/客户端

from celery import Celery

#####################################

@celery_client.task  # ===> celery_client.task(send_active_email)  装饰就是method
def send_active_email(to_email, user_name, token):
    """封装发送邮件方法"""
    time.sleep(10)
    subject = "test"  # 标题
    body = ""  # 纯文本邮件体写这里
    from django.conf import settings  # 导入settings,方便粘贴方法不用考虑引用问题
    sender = settings.EMAIL_FROM  # 发件人
    receiver = [to_email]  # 接收人,可以多个
    html_body = '<h1>尊敬的用户 %s, 感谢您注册XXXXXXXXX!</h1>' \
                '<br/><p>请点击此链接**您的帐号<a href="http://127.0.0.1:8000/users/active/%s">' \
                'http://127.0.0.1:8000/users/active/%s</a></p>' % ('XXXX', 'XXXXX', 'XXXXXX')
    from django.core.mail import send_mail 

    send_mail(subject, body, sender, receiver, html_message=html_body)  # html字符串写这里

# 3. 写好以后将项目拷贝一份到另外一台服务器然后把##中的django初始化的代码加上,执行第4步的命令即可测试

# 4最后 work on 到你的虚拟环境


celery -A celery_tasks.tasks worker -l info





"生产者"                                                    "消费者"