celery

情景:用户发起request,并等待response返回。在本些views中,可能需要执行一段耗时的程序,那么用户就会等待很长时间,造成不好的用户体验,比如发送邮件、手机验证码等。

使用celery后,情况就不一样了。解决:将耗时的程序放到celery中执行。

celery名词:

  • 任务task:就是一个Python函数。
  • 队列queue:将需要执行的任务加入到队列中。
  • 工人worker:在一个新进程中,负责执行队列中的任务。
  • 代理人broker:负责调度,在布置环境中使用redis。

1 首先在运行django框架的环境当中安装:

celery==3.1.25
django-celery==3.1.17

2 在项目的settings.py中进行如下配置

注册app中添加djcelery

INSTALLED_APPS = (
...
'djcelery',
}

配置任务代理和任务模块

import djcelery
djcelery.setup_loader()
BROKER_URL = 'redis://127.0.0.1:6379/2'

这里 reids是存放任务的队列。要确保环境中有redis服务

3 在应用目录下建立一个任务tasts.py文件 里面写下任务函数

 import time
from celery import task @task
def sayhello():
print('hello ...')
time.sleep(2)
print('world ...')

这里将函数用task装饰之后,django就会在我们的模块中找,如果这个函数被调用的时候,就自动添加到celery队列当中,队列帮我们执行

4 在视图当中调用

from booktest import tasks
...
def sayhello(request):
# print('hello ...')
# time.sleep(2)
# print('world ...')
tasks.sayhello.delay()
return HttpResponse("hello world")

切记要引入刚刚任务文件,

并且调用的时候不能直接调用,要任务函数.delay() 进行调用

如果任务函数要参数,则将参数表传给delay()

5 执行迁移

python manage.py migrate

6 启用redis服务器

sudo service redis start

7 启动celery的worker

python manage.py celery worker --loglevel=info

在这之后,可以运行我们的功能模块,当任务函数被调用的时候,就会送进celery队列,有celery帮我们托管调度。不会阻塞我们的主线程~

最新文章

  1. js学习笔记7----return,arguments及获取元素样式
  2. anroid开发者专用vpn
  3. node.js学习的资源整理
  4. Configure Log Shipping
  5. Protobuf语言指南
  6. thinkphp中神奇的create()方法
  7. Javascript-one
  8. C# - 委托的使用
  9. jsoup.parse 的一个坑
  10. tkinter中checkbutton多选框控件和variable用法(六)
  11. 使用anaconda创建tensorflow环境后如何在jupyter notebook中使用
  12. UIPresentationController - iOS自定义模态弹出框
  13. C#实现的系统内存清理
  14. Codeforces 1136D - Nastya Is Buying Lunch - [贪心+链表+map]
  15. Linux系统下面crontab选择默认编译器
  16. butterknife 配置了点击和绑定无效
  17. java连接数据库时的报错
  18. ie中input光标问题
  19. Linux课程学习之我思
  20. cloudstack api调用python

热门文章

  1. oracle、instantclient以及plsql安装包
  2. python3.6.4 tkinter安装
  3. [SDOI2010] 魔法猪学院
  4. spring boot高性能实现二维码扫码登录(下)——订阅与发布机制版
  5. 分析 webpack 打包后的代码
  6. 将 Shiro 作为应用的权限基础 四:shiro的配置说明
  7. 配置COCO API(安装COCO)
  8. Jquery给网页的title取值和赋值
  9. C语言函函数嵌套
  10. C语言第二周作业