Django中celery的使用(非常简单的用法)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Django中celery的使⽤(⾮常简单的⽤法)
这⾥主要展⽰⼀个最简单的django中的celery任务,为了让⼤家都可以⽤上celery。
话不多说,⾸先给⼤家看⼀下我的⽬录
这⾥的TestCelery是我的项⽬名称,CeleryTask是app名称。
这个项⽬安装的环境:(感觉有⼏个没⽤到,反正先装上)
(1) Python == 3.5.2 (2) Django == 2.1.15 (3) Celery == 3.1.26.post2 (4) Django-Celery == 3.2.2 (5) Django-redis == 4.10.0 (6) redis == 2.10.6
我这⾥⽤到的中间⼈Broker是redis,所以就安装了redis相关的包。
接下去就是操作步骤。
----------------------------------------------------------------------------------------------------------------------------------
Step1:修改settings.py,在最后加上这两句。
(看了⽹上很多教程,要加INSTALL APP, 以及⼀堆配置。
但后来我⼀个个删掉,发现最后剩这两个就可以运⾏最简单的Celery了)
BROKER_URL = 'redis://127.0.0.1:6379/14'# 任务容器地址,redis数据库地址
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/15'# 任务结束的地址
Step2:在TestCelery下新建⼀个celery.py
import os
from celery import Celery
from django.conf import settings
# 设置celery的环境变量和django-celery的⼯作⽬录
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "TestCelery.settings")
# 实例化celery应⽤,传⼊服务器名称
app = Celery("TestCelery")
# 加载celery配置
app.config_from_object("django.conf:settings")
# 如果在项⽬中,创建了task.py,那么celery就会沿着app去查找task.py来⽣成任务
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
Step3:在TestCelery下的__init__.py
from .celery import app as celery_app
__all__ = ['celery_app']
Step4:在CeleryTask下新建tasks.py
from__future__import absolute_import, unicode_literals
import time
from celery import shared_task
@shared_task
def adds():
for i in range(0, 10):
print(i)
time.sleep(1)
return'finish'
Step5:在TestCelery下的views.py
from django.http import JsonResponse, HttpResponse
from CeleryTask import tasks
from celery.result import AsyncResult
# Create your views here.
def index(request):
""" 进⼊这个url的时候就触发异步任务,并在session中记录task_id """
res = tasks.adds.delay()
request.session['task_id'] = res.task_id
return JsonResponse({'status': 'successful', 'task_id': res.task_id})
def dasd(request):
""" 进⼊url就会去获取session中的task_id,并检测任务. 若任务还在进⾏就显⽰页⾯还在加载,若进⾏完成就显⽰hahaha """
task_id = request.session.get('task_id')
if task_id and AsyncResult(task_id).state == 'PENDING': # 加载时的状态为PENDING
return HttpResponse('页⾯正在加载...')
return HttpResponse('hahaha')
Step6:在TestCelery下的urls.py
from django.conf.urls import url
from django.contrib import admin
from TestCelery import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', views.index),
url(r'^dasd/', views.dasd),
]
代码部分结束
---------------------------------------------------------------------------------------------------------------------------------------------------------
开启程序部分:
Step1:开启本地的redis(这⾥就不介绍如何安装redis和开启redis了)
Step2:开启django项⽬
Step3:在Terminal中输⼊ celery worker -A TestCelery -l INFO
终端⾥显⽰的界⾯如下:
********************
有celery ready这样的字出现,就表⽰celery已经开启。
Step4:在浏览器中输⼊,查看第⼀个页⾯,并触发celery任务。
http://127.0.0.1:8000/index/
此时返回终端可以查看celery的运⾏过程
上⾯这样就是运⾏了adds的任务了
Step5:在浏览器中输⼊,查看第⼆个页⾯。
若在第⼀个任务没有完成的情况下到第⼆个页⾯可以看到⼀个异步的效果。
http://127.0.0.1:8000/dasd/
在任务没完成的情况下显⽰:
多次刷新页⾯,⾄任务完成后显⽰:
---------------------------------------------------------------------------------------------------------------------------------------- 这就是⼀个简单的django中运⽤celery的例⼦了!。