django中配置使用celery
环境版本:
windows7 x64
django 1.11.6
django-celery 3.2.2
工程结构说明:源码下载请访问https://i.cnblogs.com/Files.aspx

1、新建django项目DjangoCelery(具体请参考https://www.cnblogs.com/apple2016/p/11434107.html),并启动,启动方式包括2种:
1)通过eclipse,右击项目名称,Run As----Pydev:Django
2)在manage.py文件所在路径执行命令:python manage.py runserver 0.0.0.0:8000
本次启动采用方式1,启动成功后,控制台日志打印信息如下:

2、在...\testdj\testdj\testdj下新建celery配置文件celeryconfig.py:
# -*- coding: utf-8 -*- '''
Created on 2019年8月28日 @author: lenovo
'''
import celery
import djcelery #当djcelery.setup_loader()运行时,Celery便会去查看INSTALLD_APPS下包含的所有app目录中的tasks.py文件,找到标记为task的方法,将它们注册为celery task。
djcelery.setup_loader() #设置不同的队列,不要只使用默认的队列,这样当任务比较多的时候任务之间会相互影响(例如将普通任务和定时任务混在一起),
CELERY_QUEUES={
#定时任务队列
'beat_tasks':{
'exchange':'beat_tasks',
'exchange_type':'direct',
'binding_key':'beat_tasks'
},
'work_queue':{
'exchange':'work_queue',
'exchange_type':'direct',
'binding_key':'work_queue'
}
#普通任务队列
} CELERY_DEFAULT_QUEUE='work_queue' #设置默认队列,若不指定队列则使用该队列 CELERY_IMPORTS=(
'course.tasks',
) #参数配置可参考官网:http://docs.celeryproject.org/en/latest/userguide/configuration.html
CELERY_ACKS_LATE=True #允许重试
CELERYD_FORCE_EXECV=True #可以让Celery更加可靠,只有当worker执行完任务后,才会告诉MQ,消息被消费,防治死锁
CELERYD_CONCURRENCY=4 #设置并发的worker数量
CELERYD_MAX_TASKS_PRE_CHILD=100 #每个worker最多执行100个任务被销毁,可以防止内存泄露
CELERYD_TASK_TIME_LIMIT=12*30 #单个任务的最大运行时间为6分钟,超过的话就被杀掉
3、在项目路径...\testdj\testdj下新建app,命名为course
右击项目名称testdj,选择Django---create application(mange.py startapp),输入app名称完成创建;
4、将新建的course这个app和djcelery模块注册到settings.py中:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'djcelery',
'course',
]
注册djcelery是为了后续通过manage.py使用其相关命令 ;


5、建立Celery与django的关系,包括broker和backend设置,在settings.py中完成相关配置:
#Celery
from celeryconfig import *
BROKER_BACKEND='redis'
BROKER_URL='redis://localhost:6379/1'
CELERY_RESULT_BACKEND='redis://localhost:6379/2'
6、在...\testdj\testdj\course下新建tasks.py文件
# -*- coding: utf-8 -*- '''
Created on 2019年8月28日 @author: lenovo
'''
import time
from celery.task import Task class CourseTask(Task):
name='course-task' #给该任务起一个名字,这样可以用它在其他地方表示这个任务 def run(self,*args,**kwargs):
print 'start course task'
time.sleep(4)
print 'args={},kwargs={}'.format(args, kwargs)
print 'end course task'
7、新建views.py
# -*- coding: utf-8 -*- '''
Created on 2019年8月29日 @author: lenovo
'''
from course.tasks import CourseTask
from django.http import JsonResponse def do(request):
#执行异步任务
print 'start do request'
CourseTask.delay()
print 'end do request'
return JsonResponse({'result':'ok'})
8、修改urls.py文件:
from django.conf.urls import url
from django.contrib import admin from course import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^do/$',views.do,name='do'),
]
9、启动worker:在manage.py文件所在路径下执行命令python manage.py celery worker -l INFO

10、打开浏览器访问http://127.0.0.1:8000/do/完成请求发送,查看runserver启动的服务日志显示通过views.py已发送任务成功,查看worker日志显示worker已接收到任务并进行了消费



并且我们发起请求时,
start do request
end do request
是实时打印的(而非等待4S才打印end do request),说明任务未出现阻塞情况,证明任务是异步的。
11、增加定时任务设置:修改celeryconfig.py文件,增加定时任务,并指定定时任务运行在beat_tasks队列中:
# -*- coding: utf-8 -*- '''
Created on 2019年8月28日 @author: lenovo
'''
import celery
import djcelery #当djcelery.setup_loader()运行时,Celery便会去查看INSTALLD_APPS下包含的所有app目录中的tasks.py文件,找到标记为task的方法,将它们注册为celery task。
djcelery.setup_loader() #设置不同的队列,不要只使用默认的队列,这样当任务比较多的时候任务之间会相互影响(例如将普通任务和定时任务混在一起),
CELERY_QUEUES={
#定时任务队列
'beat_tasks':{
'exchange':'beat_tasks',
'exchange_type':'direct',
'binding_key':'beat_tasks'
},
'work_queue':{
'exchange':'work_queue',
'exchange_type':'direct',
'binding_key':'work_queue'
}
#普通任务队列
} CELERY_DEFAULT_QUEUE='work_queue' #设置默认队列,若不指定队列则使用该队列 CELERY_IMPORTS=(
'course.tasks',
) #参数配置可参考官网:http://docs.celeryproject.org/en/latest/userguide/configuration.html
CELERY_ACKS_LATE=True #允许重试
CELERYD_FORCE_EXECV=True #可以让Celery更加可靠,只有当worker执行完任务后,才会告诉MQ,消息被消费,防治死锁
CELERYD_CONCURRENCY=4 #设置并发的worker数量
CELERYD_MAX_TASKS_PRE_CHILD=100 #每个worker最多执行100个任务被销毁,可以防止内存泄露
CELERYD_TASK_TIME_LIMIT=12*30 #单个任务的最大运行时间为6分钟,超过的话就被杀掉 #设置定时任务
from datetime import timedelta CELERYBEAT_SCHEDULE={
'task1':{
'task':'course-task',
'schedule':timedelta(seconds=5),
'options':{
'queue':'beat_tasks'
}
}
}
12、启动beat:执行命令python manage.py celery beat -l INFO

13、查看beat日志定时任务发送情况以及worker日志任务消费情况,当前定时任务跑在beat_tasks队列里正常
beat日志显示按照定时任务设置要求每隔5s发送一次任务:

worker日志显示worker成功消费了每个定时任务:

django中配置使用celery的更多相关文章
- Django中配置用Redis做缓存和session
django-redis文档: http://django-redis-chs.readthedocs.io/zh_CN/latest/# 一.在Django中配置 # Django的缓存配置 CAC ...
- django中配置MySql
1.配置字段 在setting文件中配置数据库字段:数据库需要提前手动创建好:语句(create database testdb charset "utf8";) DATABASE ...
- 如何在Django中配置MySQL数据库
直接上图 在项目中直接找到settings 文件 第一步 原始Django自带数据库 第二步将配置改成MySQL的数据 第三步 在__init__文件中告知Django使用MySQL数据 ...
- Django 中配置MySQL数据库
在Django的项目中会默认使用sqlite的数据库 配置MySQL需要在setting.py 里加入以下设置: 配置数据库 DATABASES = { 'default': { 'ENGINE': ...
- django中配置允许跨域请求
对于django 安装django-cors-headers,详情请看官方文档 pip install django-cors-headers 配置settings.py文件 a.在INSTALLED ...
- Django中配置自定义日志系统
将
- django中路由配置的正则
在django中配置路由遇到正则的坑: django2.x版本中使用re_path来进行正则表达式的匹配 用法如下: from Django.urls import re.path(导入re_path ...
- 测试开发之Django——No3.Django中的试图(views)
说到views,我们先来说django中执行的一个顺序. 我们打开一个django中配置的页面,之后的执行是有这么几个步骤: 1.系统配置的urls中寻找是否配置了这个地址: 2.如果已经配置了这个地 ...
- Django中使用静态资源/文件
Django中常需要引用js,css,小图像文件,一般我们把这一类文件称为静态文件,放置在static文件夹中,接下来,对Django中配置静态文件进行下傻瓜式的步骤介绍 在工程目录下新建static ...
随机推荐
- mask-rcnn解读(一):clip_boxes_graph
此部分为mask-rcnn中clip_boxes_graph()函数的使用.首先利用代码解决基本函数的使用,然后运行代码,其细节如下:代码如下: import tensorflow as tfimpo ...
- ubuntu与centos系统对比
CentOS与Ubuntu该如何选择,哪个更好用.笔者在自媒体平台收集了一些网友的观点,较为经典,分享给大家.至于应该选择哪个,希望看完本文章后,读者心中有数. 观点1:CentOS适用于服务器,Ub ...
- win10桌面左下角搜索框无法搜索解决办法
方法1.首先看下window search服务是不是被禁止或者停止运行了,如果停止了,就重新启动看看. 方法2.如果上面的方法还没有解决的话:任务管理器-详细信息--结束explorer.exe进程- ...
- Docker容器进入的4种方式以及tomcat查看日志
docker logs 查看实时日志 原文:http://www.cnblogs.com/qufanblog/p/6927411.html docker logs -f -t --since=&quo ...
- 安装centos6.10时,安装完成重启报错error 15,file not found
今天在一台老式联想服务器上安装centos6.10操作系统,安装完成,重启时,出现报错 error 15, file not found...... 在百度上搜索到进grub编辑,可还是无法解决问题, ...
- np.random 系列函数
1 random() # 产生区间 [0, 1) 均匀分布的浮点数样本值 np.random.seed(42) 2 rand(d0, d1, ..., dn) # 产生区间 [0, 1) 均 ...
- 最常见Linux操作
命令 含义 cd /home/hadoop #把/home/hadoop设置为当前目录 cd .. #返回上一级目录 cd ~ #进入到当前Linux系统登录用户的主目录(或主文件夹).在 Linux ...
- 解决opencart设置SSL后评论不能翻页的问题
为了网站的安全和seo,我们为客户的opencart网站添加了SSL加密实现https,并设置了301跳转使http跳到https,基本所有的功能都完好,就是有一点评论分页无法加载分页,去分析了链接源 ...
- 11-cmake语法-函数和宏的定义
cmake语法不仅仅可以适用于 CMakeLists.txt,也适用于 xxx.cmake 文档. 在 OpenCV 的 CMakeLists.txt 中,很多 ocv_XXX() 的函数,都是定义在 ...
- 项目1:ATM+购物商城项目
项目1:ATM+购物商城 1.项目介绍 项目需求: # 项目需求如下:'''- 额度 15000或自定义- 实现购物商城,买东西加入购物车,调用信用卡接口结账- 可以提现,手续费5%- 支持多账 ...