制作个简单公司网站要多少钱,免费网上申请注册,城乡规划师证报考条件,电商推广专员情景#xff1a;用户发起request#xff0c;并等待response返回。在本些views中#xff0c;可能需要执行一段耗时的程序#xff0c;那么用户就会等待很长时间#xff0c;造成不好的用户体验#xff0c;比如发送邮件、手机验证码等使用celery后#xff0c;情况就不一样了… 情景用户发起request并等待response返回。在本些views中可能需要执行一段耗时的程序那么用户就会等待很长时间造成不好的用户体验比如发送邮件、手机验证码等使用celery后情况就不一样了解决将耗时的程序放到celery中执行点击查看celery官方网站点击查看celery中文文档celery名词 任务task就是一个Python函数队列queue将需要执行的任务加入到队列中工人worker在一个新进程中负责执行队列中的任务代理人broker负责调度在布置环境中使用redis 安装包 celery3.1.25
celery-with-redis3.0
django-celery3.1.17示例 在booktest/views.py文件中创建视图sayhello import time
...
def sayhello(request):print(hello ...)time.sleep(2)print(world ...)return HttpResponse(hello world)在booktest/urls.py中配置 url(r^sayhello$,views.sayhello),启动服务器在浏览器中输入如下网址 http://127.0.0.1:8000/sayhello/在终端中效果如下图两次输出之间等待一段时间才会返回结果 在test6/settings.py中安装 INSTALLED_APPS (...djcelery,
}在test6/settings.py文件中配置代理和任务模块 import djcelery
djcelery.setup_loader()
BROKER_URL redis://127.0.0.1:6379/2
CELERY_IMPORTS (booktest.task)在booktest/目录下创建task.py文件 import time
from celery import tasktask
def sayhello():print(hello ...)time.sleep(2)print(world ...)打开booktest/views.py文件修改sayhello视图如下 from . import task
...
def sayhello(request):# print(hello ...)# time.sleep(2)# print(world ...)task.sayhello.delay()return HttpResponse(hello world)执行迁移生成celery需要的数据表 python manage.py migrate生成表如下 启动Redis如果已经启动则不需要启动 sudo service redis start启动worker python manage.py celery worker --loglevelinfo启动成功后提示如下图 打开新终端进入虚拟环境启动服务器刷新浏览器在旧终端中两个输出间仍有时间间隔 运行完成后如下图注意两个终端中的时间服务器的响应是立即返回的 打开booktest/task.py文件修改为发送邮件的代码就可以实现无阻塞发送邮件 #codingutf-8
from django.conf import settings
from django.core.mail import send_mail
from celery import tasktask
def sayhello():msga hrefhttp://www.itcast.cn/subject/pythonzly/index.shtml target_blank点击激活/asend_mail(注册激活,,settings.EMAIL_FROM,[xinlan88163.com],html_messagemsg)