您的位置:首页 > 编程语言 > Go语言

Django 使用celery做异步任务处理

2016-10-18 16:15 791 查看
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的返回值。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  django 异步 celery