Django 使用celery做异步任务处理

celery 分布式任务框架,处理异步的

安装
sudo apt-get/yum install rabbitmq-server(使用redis: redis-server/ yum install redis)
pip install celery django-celery
运行
python manage.py makemigrations  
python manage.py migrate
python manage.py runserver                       #启动terminal
python manage.py celery worker --loglevel=info   #启动worker:

任务实例代码在iaas.cpms.cloud.tasks_demo.py

settings.py:
import djcelery
djcelery.setup_loader()
rabbitmq
redis
BROKER_HOST = "127.0.0.1"
BROKER_PORT = 5672
BROKER_USER = "guest"
BROKER_PASSWORD = "guest"
BROKER_VHOST = "/"
BROKER_URL='redis://127.0.0.1:6379/0'

INSTALLED_APPS = (
    ......,
    'djcelery',
    'kombu.transport.django',
    ......
tasks.py:
from celery import platforms
# 开启超级管理员使用模式
platforms.C_FORCE_ROOT = True
# 导入任务子模块
from iaasms.cpms.cloud.task_demo import *
task_demo.py:
在views中要调用的函数
from celery import task
import time

@ task()
def  add(x, y):
    print 'begin...'
    time.sleep(10)
    print 'end...'
    return x + y
views.py:
使用函数add时,加上.delay。
def test(request):
     from iaasms.cpms.cloud. tasks import add
    result= add. delay(1,10)
    print  'result of add.deplay',  result
    return JsonResponse({'code':'success'})

访问test函数后,页面立即返回{'code':'success'}。


在python manage.py runserver 下


result of add.deplay 119024eb-4c86-4f5c-8bf3-4da93e563723


在python manage.py celery worker --loglevel=info 下


[2016-08-25 18:22:19,321: INFO/MainProcess] 
Received task: iaasms.cpms.cloud.task_demo.add[119024eb-4c86-4f5c-8bf3-4da93e563723]
[2016-08-25 18:22:19,323: WARNING/Worker-1] begin...


(10秒后......因为在add函数中:time.sleep(10))


[2016-08-25 18:22:29,342: WARNING/Worker-1] end...
[2016-08-25 18:22:29,372: INFO/MainProcess] Task iaasms.cpms.cloud.task_demo.add[119024eb-4c86-4f5c-8bf3-4da93e563723] succeeded in 10.0493727878s: 11(这个11是task:add.delay(1,10)执行后的结果,也就是函数add的返回值。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值