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()
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 下
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的返回值。)