celery 异步任务处理

当用户发起 request 请求后,并等待及返回 response 对象。在某些 view 视图函数中,可能需要执行一段耗时操作的程序,那么此时用户就会等待很长时间,由此造成极差的用户体验,例如下载或上传文件、发送邮件、 发送验证码等。此时,就可以考虑使用 celery 异步任务处理,并将耗时操作的程序放到 celery 中来执行

celery 是一个强大的分布式任务队列,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行。我们通常使用它来实现异步任务(async task)和定时任务(crontab)。异步任务比如是发送邮件、文件上传、 图像处理等等一些比较耗时的操作,定时任务是需要在特定时间执行的任务

celery 库是第三方模块         pip install celery
>>>项目的应用下的 views.py 
def sayhi(request):
    print("----hello----")
    time.sleep(5)
    print("---world---")
    return HttpResponse("This is say hi")

项目的 settings.py 文件中

urlpatterns = [
    url(r'^sayhi/',sayhi),
]

启动服务:         python manage.py runserver

>>>    http://127.0.0.1:8000/sayhi/

控制台:


 项目下新建 包celery_task,包下面新建tasks.py文件

import os
import django
# sessionCookieLogin 是我的项目名
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sessionCookieLogin.settings")
django.setup()

# redis://127.0.0.1:6379/2 是我确定数据库为空就选择了第2个
app= Celery('celery_task.tasks',broker='redis://127.0.0.1:6379/2')

@app.task
def sayHi():
    print("-----------good good study day day up------------")
    time.sleep(5)
    print("-----------keep going------------")

因为第2个数据库被我选择了所以不为空,想选择哪个数据库可以从第一个开始查看

select 1

keys *

出现(empty list or set) 即可选择这个数据库

 先不急着运行,        先安装另外一个库         pip install eventlet

随后在tasks.py文件中输入

celery -A celery_task.tasks worker -l info -P eventlet 

重新启动服务器:        python manage.py runserver

进入        http://127.0.0.1:8000/sayhi/
 

 

 跳回 tasks.py 文件继续配置

from django.conf import settings
from django.core.mail import send_mail

@app.task
def send_Email(email):
    send_mail(subject="极致果蔬用户激活邮件",
              message="",
              from_email=settings.EMAIL_FROM,
              # 把目标邮箱输入
              recipient_list=[email],
              html_message='<h1>极致果蔬,欢迎您</h1>')

为了防止报错提前在tasks.py 文件配置:

import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sessionCookieLogin.settings")
django.setup()

在视图函数views.py里面调用异步

def send_email(request):
    """发送消息内容到邮箱"""
    # message = '<a href="http://www.edu118.cn/course/explore/wulianwang" target="_blank">点击激活</a>'
    # # 发送邮件
    # send_mail(subject = "注册激活",
    #           message = "hello",
    #           from_email = settings.EMAIL_FROM,
    #           recipient_list = ["1173690628@qq.com"],
    #           html_message=message)
    #                目标邮箱
    send_Email.delay('XXX@qq.com')
    return HttpResponse("OK")

启动服务器        python manage.py runserver         

#  celery_task 是我的tasks.py文件的目录名

再接着另起一个窗口执行         celery -A celery_task.tasks worker -l info -P eventlet

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值