Django 1.5.4 专题23 Celery RabbitMQ
2013-10-19 13:50
681 查看
celery(芹菜)是一个异步任务队列/基于分布式消息传递的作业队列。它侧重于实时操作,但对调度支持也很好。
celery用于生产系统每天处理数以百万计的任务。
celery是用Python编写的,但该协议可以在任何语言实现。它也可以与其他语言通过webhooks实现。
建议的消息代理RabbitMQ
一.安装
二.新建app
三.修改settings.py
二.修改celery_test/models.py
三.修改celery_test/tasks.py
四.运行
运行celeryd -l info 要保存窗口状态,另外打开新窗口
五.修改django_test/views.py
六.修改django_test/urls.py
celery用于生产系统每天处理数以百万计的任务。
celery是用Python编写的,但该协议可以在任何语言实现。它也可以与其他语言通过webhooks实现。
建议的消息代理RabbitMQ
一.安装
aptitude install rabbitmq-server rabbitmqctl add_user mike cheese rabbitmqctl add_vhost /django_tutorials rabbitmqctl set_permissions -p /django_tutorials mike ".*" ".*" ".*" /etc/init.d/rabbitmq-server stop /etc/init.d/rabbitmq-server start pip install celery django-celery
二.新建app
manage.py startapp celery_test
三.修改settings.py
二.修改celery_test/models.py
from django.db import models class CounterModel(models.Model): count = models.IntegerField(default=0) def __unicode__(self): return unicode(self.count)
三.修改celery_test/tasks.py
from celery.task import task from celery import current_task from celery_test.models import CounterModel from time import sleep @task() def add_two_numbers(a, b): """This is where you do the bulk of the your queued task needs to do""" sleep(10) count = CounterModel.objects.create(count = a + b) return count @task() def do_something_long(): for i in range(100): sleep(0.2) current_task.update_state(state="PROGRESS", meta={'current':i, 'total':100})
四.运行
manage.py schemamigration celery_test --initial manage.py migrate manage.py celeryd -l info manage.py shell
运行celeryd -l info 要保存窗口状态,另外打开新窗口
五.修改django_test/views.py
from django.http import HttpResponseRedirect,HttpResponse from celery.result import AsyncResult from celery_test.tasks import do_something_long from django.core.urlresolvers import reverse from django.utils import simplejson as json def start_celery_task(request): task = do_something_long.delay() return HttpResponseRedirect( "%s%s" % ('/celery_progress?task_id=', task.id) ) def monitor_celery_task(request): if 'task_id' in request.GET: task_id = request.GET['task_id'] else: return HttpResponse('No task_id passed.') task = AsyncResult(task_id) data = task.result or task.state return HttpResponse(json.dumps(data), mimetype='application/json')
六.修改django_test/urls.py
url(r'^celery_test/', 'django_test.views.start_celery_task'), url(r'^celery_progress/', 'django_test.views.monitor_celery_task'),
相关文章推荐
- OJ2.0 Django+Rabbitmq+Celery配置
- Celery异步任务队列/周期任务+ RabbitMQ + Django
- celery + rabbitmq + django
- HOWTO django + celery + rabbitmq simple setup for testing purpose
- Django + Celery + Rabbitmq setting
- django+celery+ RabbitMQ实现异步任务最完整教程
- django+celery+RabbitMQ 环境配置
- Celery+django_celery+flask_celery+rabbitmq+flower+
- Nginx+uwsgi+django+RabbitMQ+celery安装配置
- Django+Rabbitmq+Celery 框架学习
- Django 1.5.4 专题11 file uploading and updating database schema
- Django 1.5.4 专题18 User Profile
- Django 1.5.4 专题21 haystack whoosh
- Django 1.5.4 专题五 cookies 和 sessions
- Django 1.5.4 专题26 Bootstrap
- Django 1.5.4 专题12 Ajax search 功能
- Django 1.5.4 专题27 pinax
- Django 1.5.4 专题26 Bootstrap
- Django 1.5.4 专题一 入门
- Django 1.5.4 专题六 login 和 logout