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 smallseg分词用法实例分析
May 28 Python
一键搞定python连接mysql驱动有关问题(windows版本)
Apr 23 Python
基于Python对象引用、可变性和垃圾回收详解
Aug 21 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
Jan 29 Python
Python对切片命名的实现方法
Oct 16 Python
Python+OpenCV图片局部区域像素值处理详解
Jan 23 Python
python实现栅栏加解密 支持密钥加密
Mar 20 Python
Django中Middleware中的函数详解
Jul 18 Python
python实现拼图小游戏
Feb 22 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
Apr 14 Python
简单了解python shutil模块原理及使用方法
Apr 28 Python
python利用文件时间批量重命名照片和视频
Feb 09 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实现禁用IE和火狐的缓存问题
2012/12/03 PHP
php递归实现无限分类的方法
2015/07/28 PHP
我整理的PHP 7.0主要新特性
2016/01/07 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
php适配器模式简单应用示例
2019/10/23 PHP
JavaScript Cookie 直接浏览网站分网址
2009/12/08 Javascript
匹配任意字符的正则表达式写法
2010/04/29 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
Javascript基础_标记文字的实现方法
2016/06/14 Javascript
AngularJS实现分页显示数据库信息
2016/07/01 Javascript
快速解决js中window.location.href不工作的问题
2016/11/02 Javascript
微信小程序功能之全屏滚动效果的实现代码
2018/11/22 Javascript
基于vue.js实现分页查询功能
2018/12/29 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
[01:42]辉夜杯战队访谈宣传片—FANTUAN
2015/12/25 DOTA
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
python使用PyGame播放Midi和Mp3文件的方法
2015/04/24 Python
Python3读取zip文件信息的方法
2015/05/22 Python
Python实现自动添加脚本头信息的示例代码
2016/09/02 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
python gensim使用word2vec词向量处理中文语料的方法
2019/07/05 Python
python高阶函数map()和reduce()实例解析
2020/03/16 Python
Python如何将装饰器定义为类
2020/07/30 Python
python爬虫中抓取指数的实例讲解
2020/12/01 Python
python 基于Apscheduler实现定时任务
2020/12/15 Python
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
班长演讲稿范文
2014/04/24 职场文书
好的促销活动方案
2014/08/21 职场文书
小学生校园广播稿
2014/09/28 职场文书
2015年农村党员公开承诺事项
2015/04/28 职场文书
社区党建工作总结2015
2015/05/13 职场文书
小学远程教育工作总结
2015/08/13 职场文书
爱国之歌(8首)
2019/09/29 职场文书
python 三边测量定位的实现代码
2021/04/22 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
2021/06/07 Python