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编程对列表中字典元素进行排序的方法详解
May 26 Python
python爬虫使用cookie登录详解
Dec 27 Python
Python实现购物车程序
Apr 16 Python
python中将\\uxxxx转换为Unicode字符串的方法
Sep 06 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
Dec 26 Python
通过shell+python实现企业微信预警
Mar 07 Python
解决Python对齐文本字符串问题
Aug 28 Python
python用线性回归预测股票价格的实现代码
Sep 04 Python
如何基于Python获取图片的物理尺寸
Nov 25 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
Feb 27 Python
python属于解释语言吗
Jun 11 Python
TensorFlow保存TensorBoard图像操作
Jun 23 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设计模式 注册表模式
2012/02/05 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
php中namespace及use用法分析
2016/12/06 PHP
PHP递归算法的简单实例
2019/02/28 PHP
JScript中的undefined和"undefined"的区别
2007/03/08 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
js解析json读取List中的实体对象示例
2014/03/11 Javascript
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
Javascript缓存API
2016/06/14 Javascript
vuex实现简易计数器
2016/10/27 Javascript
在使用JSON格式处理数据时应该注意的问题小结
2017/05/20 Javascript
详谈js中标准for循环与foreach(for in)的区别
2017/11/02 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
python实现ftp客户端示例分享
2014/02/17 Python
Python3.x版本中新的字符串格式化方法
2015/04/24 Python
Python函数中*args和**kwargs来传递变长参数的用法
2016/01/26 Python
Python Sql数据库增删改查操作简单封装
2016/04/18 Python
Python给你的头像加上圣诞帽
2018/01/04 Python
python程序封装为win32服务的方法
2021/03/07 Python
基于wxPython的GUI实现输入对话框(2)
2019/02/27 Python
python之pymysql模块简单应用示例代码
2019/12/16 Python
python statsmodel的使用
2020/12/21 Python
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
Happy Socks英国官网:购买五颜六色的袜子
2020/11/03 全球购物
高级护理专业毕业生推荐信
2013/12/25 职场文书
创业计划书——互联网商机
2014/01/12 职场文书
模特职业生涯规划范文
2014/02/26 职场文书
经典广告词大全
2014/03/14 职场文书
2015年全国爱耳日活动总结
2015/02/27 职场文书
教师党员个人自我评价
2015/03/04 职场文书
行政处罚事先告知书
2015/07/01 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书
公司员工培训管理制度
2015/08/04 职场文书
关于springboot配置druid数据源不生效问题(踩坑记)
2021/09/25 Java/Android
国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程
2021/10/05 Javascript