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获取apk文件URL地址实例
Nov 01 Python
Python实现自动发送邮件功能
Mar 02 Python
利用python为运维人员写一个监控脚本
Mar 25 Python
Python中函数参数调用方式分析
Aug 09 Python
Python实现的在特定目录下导入模块功能分析
Feb 11 Python
python2使用bs4爬取腾讯社招过程解析
Aug 14 Python
关于Pytorch MaxUnpool2d中size操作方式
Jan 03 Python
python Tensor和Array对比分析
Jan 08 Python
Python基于requests库爬取网站信息
Mar 02 Python
pycharm如何设置官方中文(如何汉化)
Dec 29 Python
Python使用UDP实现720p视频传输的操作
Apr 24 Python
python简单验证码识别的实现过程
Jun 20 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
如何让搜索引擎抓取AJAX内容解决方案
2014/08/25 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
Symfony模板的快捷变量用法实例
2016/03/17 PHP
关于PHP中字符串与多进制转换函数的实例代码
2016/11/03 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
2017/11/28 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
2020/07/13 PHP
html 锁定页面(js遮罩层弹出div效果)
2009/10/27 Javascript
Jquery多选框互相内容交换的实例代码
2013/07/04 Javascript
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
JavaScript中for循环的使用详解
2015/06/03 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
2017/03/23 jQuery
Angular2学习教程之TemplateRef和ViewContainerRef详解
2017/05/25 Javascript
理解javascript async的用法
2017/08/22 Javascript
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
Angular Material Icon使用详解
2018/11/07 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
[04:40]DOTA2-DPC中国联赛1月26日Recap集锦
2021/03/11 DOTA
Django小白教程之Django用户注册与登录
2016/04/22 Python
一些常用的Python爬虫技巧汇总
2016/09/28 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
2020/03/30 Python
css3实现3D文本悬停改变效果的示例代码
2019/01/16 HTML / CSS
StubHub德国:购买和出售门票
2017/09/06 全球购物
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
具有防紫外线功能的高性能钓鱼服装:Hook&Tackle
2018/08/16 全球购物
生物专业个人自荐信范文
2013/11/29 职场文书
前台文员岗位职责
2013/12/28 职场文书
《地震中的父与子》教学反思
2014/04/10 职场文书
政工例会汇报材料
2014/08/26 职场文书
学术研讨会主持词
2015/07/04 职场文书
环保建议书作文300字
2015/09/14 职场文书
一次SQL如何查重及去重的实战记录
2022/03/13 MySQL