django学习笔记7:django和celery实现异步
2016-06-30 22:27
489 查看
django和celery实现异步:
首先安装:
pip install celery
pip install django-celery
pip install django-kombu
修改mytest\mytest\settings.py
在开头添加:
最后创建Celery所需的数据表, 运行:
python manage.py migrate
在mytest\test1\下添加tasks.py
import django
django.setup()
不然会报app未加载的错误
这里是创建一个任务,简单的打印字符串
修改mytest\test1\views.py
新增以下内容:
修改mytest\test1\urls.py
添加:
url( r'^hello/$',test1_views.hello,name='hello') ,
先到项目中启动django服务,python manage.py runserver 或者 masge.py runserver
再打开一个终端,进入项目,python manage.py celery worker --loglevel=info 或者 manage.py celery worker --loglevel=info
浏览器进入127.0.0.1:8000/hello/
浏览器显示:
浏览器没刷新一次,就会在 worker终端出现'GreenPine'字符串,但是页面始终是hello world!!!!
通过任务调度实现异步
django和celery再具体一点的实现:
修改mytest\test1\tasks.py
修改mytest\test1\forms.py
新增以下内容:
修改mytest\test1\views.py
新增mytest\test1\templates\to_hello.html
新增mytest\test1\templates\hello.html
修改urls.py
url( r'^to_hello/$',test1_views.to_hello,name='to_hello'),
先到项目中启动django服务,python manage.py runserver 或者 masge.py runserver
再打开一个终端,进入项目,python manage.py celery worker --loglevel=info 或者 manage.py celery worker --loglevel=info
浏览器进入127.0.0.1:8000/to_hello/
浏览器显示:
输入数字后跳转到hello页面
worker终端显示:
数据都传过来了,再点击to_hello回到to_hello页面,再输入数字,就这样一直循环动作看着worker终会发现celery的任务是排队的,等前一个完成后再进行下一个
这里可以看出来celery和django实现异步其实是通过两个服务完成
django将一个需要长时间等待才能完成的任务扔给了celery的服务,然后自己继续执行,这样在页面上就感觉是异步完成
而celery收到任务以后还是扔到一个列队里,每个任务排队一个一个的执行
不过我试了一下很频繁的多次扔任务会报错,然后celery得服务会停掉,难道是我手速太快了???
首先安装:
pip install celery
pip install django-celery
pip install django-kombu
修改mytest\mytest\settings.py
在开头添加:
import djcelery djcelery.setup_loader() BROKER_URL='django://' INSTALLED_APPS = [ .......... 'djcelery', "kombu.transport.django", ]
最后创建Celery所需的数据表, 运行:
python manage.py migrate
在mytest\test1\下添加tasks.py
#coding:utf-8 import time from celery.task import task import django django.setup() @task def _do_kground_work(name): print name time.sleep(5)wenidow下要添加:
import django
django.setup()
不然会报app未加载的错误
这里是创建一个任务,简单的打印字符串
修改mytest\test1\views.py
新增以下内容:
from .tasks import _do_kground_work def hello(request): _do_kground_work.delay('GreenPine') return HttpResponse('Hello, World!!!!!')导入自定义的任务,延时执行任务,先出现HttpResponse里的内容
修改mytest\test1\urls.py
添加:
url( r'^hello/$',test1_views.hello,name='hello') ,
先到项目中启动django服务,python manage.py runserver 或者 masge.py runserver
再打开一个终端,进入项目,python manage.py celery worker --loglevel=info 或者 manage.py celery worker --loglevel=info
浏览器进入127.0.0.1:8000/hello/
浏览器显示:
浏览器没刷新一次,就会在 worker终端出现'GreenPine'字符串,但是页面始终是hello world!!!!
通过任务调度实现异步
django和celery再具体一点的实现:
修改mytest\test1\tasks.py
#coding:utf-8 import time from celery.task import task import django django.setup() @task def _do_kground_work(name): for u in range(10): time.sleep(1) print name time.sleep(5)
修改mytest\test1\forms.py
新增以下内容:
class AddHello(forms.Form): t = forms.IntegerField()
修改mytest\test1\views.py
from .forms import AddForm,AddHello def to_hello(request): form = AddHello() return render(request,'to_hello.html',{'form':form}) def hello(request): if request.method =='POST': form = AddHello(request.POST) if form.is_valid(): t = form.cleaned_data['t'] _do_kground_work.delay('GreenPine'+str(t)) return render(request,'hello.html',{'t':t})
新增mytest\test1\templates\to_hello.html
<form action={% url 'hello' %} method="post"> {% csrf_token %} {{ form}} <input type="submit" value="OK"> </form>
新增mytest\test1\templates\hello.html
<a href="{% url 'to_hello' %}">to_hello</a> {{t}} hello world
修改urls.py
url( r'^to_hello/$',test1_views.to_hello,name='to_hello'),
先到项目中启动django服务,python manage.py runserver 或者 masge.py runserver
再打开一个终端,进入项目,python manage.py celery worker --loglevel=info 或者 manage.py celery worker --loglevel=info
浏览器进入127.0.0.1:8000/to_hello/
浏览器显示:
输入数字后跳转到hello页面
worker终端显示:
数据都传过来了,再点击to_hello回到to_hello页面,再输入数字,就这样一直循环动作看着worker终会发现celery的任务是排队的,等前一个完成后再进行下一个
这里可以看出来celery和django实现异步其实是通过两个服务完成
django将一个需要长时间等待才能完成的任务扔给了celery的服务,然后自己继续执行,这样在页面上就感觉是异步完成
而celery收到任务以后还是扔到一个列队里,每个任务排队一个一个的执行
不过我试了一下很频繁的多次扔任务会报错,然后celery得服务会停掉,难道是我手速太快了???
相关文章推荐
- 树莓派----04_树莓派搭建Django
- django学习笔记6:表单
- django学习笔记5:模型
- django学习笔记4:模版
- moongoose对象无法新增删除属性
- django学习笔记3:视图与路由
- django学习笔记2:基本命令
- django学习笔记1:安装
- 怎样一开始打开activity就启动google的下拉刷新(仿优酷的下拉刷新)
- Django搭建简易博客教程(二)
- beego任务定时执行,延迟执行
- 腾讯云、极益为NGO提供免费公益云服务和开源应用
- 依赖管理工具漫谈--从Maven,Gradle到Go
- Polygon Collider 2D无法编辑的问题
- Django搭建简易博客教程(一)
- Django表单
- googlecodejam.Qualification Round Africa 2010.Problem A. Store Credit
- CodeForces 559A Gerald's Hexagon
- Google Analytics跳转页面跳转量的检测
- django 1.9.7学习笔记(1)