django celery redis使用具体实践


Posted in Python onApril 08, 2019

环境准备

  • python3.5.4
  • windows redis
  • pip install celery
  • pip install redis

windows下启动redirs server

redis-server.exe redis.windows.conf

django celery redis使用具体实践

celery配置

项目的settings.py文件修改:

# celery 设置
# celery中间人 redis://redis服务所在的ip地址:端口/数据库号
BROKER_URL = 'redis://127.0.0.1:6379/0'
# celery结果返回,可用于跟踪结果
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0'

# celery内容等消息的格式设置
CELERY_ACCEPT_CONTENT = ['application/json', ]
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

# celery时区设置,使用settings中TIME_ZONE同样的时区
CELERY_TIMEZONE = TIME_ZONE

项目文件夹下添加celery.py文件:

# coding:utf-8
from __future__ import absolute_import, unicode_literals

from celery import Celery
from django.conf import settings
import os

# 获取当前文件夹名,即为该Django的项目名
project_name = os.path.split(os.path.abspath('.'))[-1]
project_settings = '%s.settings' % project_name

# 设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', project_settings)

# 实例化Celery,网上很多教程这里都是没有设置broker造成启动失败
app = Celery('tasks', broker='redis://127.0.0.1:6379/0')

# 使用django的settings文件配置celery
app.config_from_object('django.conf:settings')

# Celery加载所有注册的应用
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

项目的init.py文件修改:

# 引入celery实例对象
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app]

测试代码

  • 如:在app01(项目名)/tasks.py:
  • 关于task,并不是一定要把所有的task放在tasks.py,可以放在其他类里面,只要在函数上加@task即可
import time
from celery import task
@task
def add(a,b):
  print("这是任务开始")
  print(a+b)
  time.sleep(10)
  print("这是任务结束")

url配置如下:

path('add', views.add, name="add")

view代码

from . import tasks
def add(request,*args,**kwargs):
  tasks.add.delay(1,2)
  result = {'code': 0, 'msg': '这是一个后台任务'}
  return JsonResponse(result)

再次配置

在manger.py目录执行下面的代码,注意网上的资料大部分执行的命令有问题,造成启动报错,比如这个就是错误的, python manage.py celery -A celery worker --loglevel=info ,请用下面的命令

celery -A djangoApi worker --pool=solo -l info

启动项目, python manager.py runserver 0.0.0.0:8081

运行项目

访问add

django celery redis使用具体实践

查看关键日志

[tasks]
 . api.base.BaseViewTask.task_run
 . api.tasks.add

[2019-04-07 13:26:02,855: INFO/MainProcess] Connected to redis://127.0.0.1:6379/0
[2019-04-07 13:26:02,869: INFO/MainProcess] mingle: searching for neighbors
[2019-04-07 13:26:03,911: INFO/MainProcess] mingle: all alone
[2019-04-07 13:26:03,926: WARNING/MainProcess] e:\app\python35\lib\site-packages\celery\fixups\django.py:202: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments!
 warnings.warn('Using settings.DEBUG leads to a memory leak, never '
[2019-04-07 13:26:03,926: INFO/MainProcess] celery@PC-20181208QWQO ready.
[2019-04-07 13:29:56,889: INFO/MainProcess] Received task: api.tasks.add[9fd98fd0-50ae-427f-8f33-52d1e4b43068]
[2019-04-07 13:29:56,894: WARNING/MainProcess] 这是任务开始
[2019-04-07 13:29:56,895: WARNING/MainProcess] 3
[2019-04-07 13:30:06,896: WARNING/MainProcess] 这是任务结束
[2019-04-07 13:30:06,898: INFO/MainProcess] Task api.tasks.add[9fd98fd0-50ae-427f-8f33-52d1e4b43068] succeeded in 10.0s: None

其他

如何结合前端,如ajax来联合使用?

  • 表中我加了个extend字段,每次在执行耗时任务后,页面按钮根据extend字段值进行判断
  • 如1表示执行中,0表示没有执行,2执行完成,来判定按钮是否可以再次点击等

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中用sleep()方法操作时间的教程
May 22 Python
让python在hadoop上跑起来
Jan 27 Python
python 性能提升的几种方法
Jul 15 Python
Python测试人员需要掌握的知识
Feb 08 Python
python中import与from方法总结(推荐)
Mar 21 Python
Python3中函数参数传递方式实例详解
May 05 Python
Python实现手机号自动判断男女性别(实例解析)
Dec 22 Python
Python爬虫实现自动登录、签到功能的代码
Aug 20 Python
python 监控logcat关键字功能
Sep 04 Python
利用django创建一个简易的博客网站的示例
Sep 29 Python
Python应用自动化部署工具Fabric原理及使用解析
Nov 30 Python
如何用python反转图片,视频
Apr 24 Python
python制作抖音代码舞
Apr 07 #Python
python实现抖音点赞功能
Apr 07 #Python
将pip源更换到国内镜像的详细步骤
Apr 07 #Python
python实现弹窗祝福效果
Apr 07 #Python
python实现祝福弹窗效果
Apr 07 #Python
python抖音表白程序源代码
Apr 07 #Python
我喜欢你 抖音表白程序python版
Apr 07 #Python
You might like
PHP base64+gzinflate压缩编码和解码代码
2008/10/03 PHP
详解php的socket通信
2015/08/11 PHP
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
javascript中最常用的继承模式 组合继承
2010/08/12 Javascript
使用apply方法处理数组的三个技巧[译]
2012/09/20 Javascript
jquery获取div宽度的实现思路与代码
2013/01/13 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
2015/07/27 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
完美实现js选项卡切换效果(一)
2017/03/08 Javascript
基于JavaScript实现移动端无限加载分页
2017/03/27 Javascript
ES6下React组件的写法示例代码
2017/05/04 Javascript
php main 与 iframe 相互通讯类(js+php同域/跨域)
2017/09/14 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
vue中post请求以a=a&b=b 的格式写遇到的问题
2018/04/27 Javascript
微信小程序实现星级评分和展示
2018/07/05 Javascript
js实现无缝滚动双图切换效果
2019/07/09 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
2019/12/16 Javascript
JS数组及对象遍历方法代码汇总
2020/06/16 Javascript
[03:17]2014DOTA2 国际邀请赛中国区预选赛 四强专访
2014/05/23 DOTA
python SSH模块登录,远程机执行shell命令实例解析
2018/01/12 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
python实现多进程代码示例
2018/10/31 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
keras训练浅层卷积网络并保存和加载模型实例
2020/07/02 Python
Lookfantastic香港官网:英国知名美妆购物网站
2018/06/19 全球购物
材料会计岗位职责
2014/03/06 职场文书
遗产继承公证书
2014/04/09 职场文书
任命书格式
2014/06/05 职场文书
2014年施工员工作总结
2014/11/18 职场文书
护林员个人总结
2015/03/04 职场文书
2015年店长工作总结范文
2015/04/08 职场文书
无违反计划生育证明格式
2015/06/24 职场文书
环境保护宣传标语大全!
2019/06/28 职场文书