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进阶篇之字典操作总结
Nov 16 Python
利用Python破解斗地主残局详解
Jun 30 Python
Python实现返回数组中第i小元素的方法示例
Dec 04 Python
Python使用SQLite和Excel操作进行数据分析
Jan 20 Python
快速解决安装python没有scripts文件夹的问题
Apr 03 Python
matlab中实现矩阵删除一行或一列的方法
Apr 04 Python
PIL图像处理模块paste方法简单使用详解
Jul 17 Python
python3.7 sys模块的具体使用
Jul 22 Python
关于python3中setup.py小概念解析
Aug 22 Python
python+opencv边缘提取与各函数参数解析
Mar 09 Python
小结Python的反射机制
Sep 28 Python
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
Jun 26 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实现长连接的方法与注意事项的问题
2013/05/10 PHP
php获取参数的几种方法总结
2014/02/18 PHP
thinkphp实现图片上传功能
2016/01/13 PHP
详谈php静态方法及普通方法的区别
2016/10/04 PHP
Ajax实现对静态页面的文章访问统计功能示例
2016/10/10 PHP
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
javascript实现阻止iOS APP中的链接打开Safari浏览器
2014/06/12 Javascript
Javascript获取当前时间函数和时间操作小结
2014/10/01 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
2015/11/17 Javascript
js+html5实现canvas绘制椭圆形图案的方法
2016/05/21 Javascript
js仿网易表单及时验证功能
2017/03/07 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
bootstrap实现点击删除按钮弹出确认框的实例代码
2018/08/16 Javascript
Vue.js的动态组件模板的实现
2018/11/26 Javascript
使用vuepress搭建静态博客的示例代码
2019/02/14 Javascript
js打开word文档预览操作示例【不是下载】
2019/05/23 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
vue动态设置页面title的方法实例
2020/08/23 Javascript
[02:10]三分钟回顾完美世界城市挑战赛
2019/01/24 DOTA
Python中input和raw_input的一点区别
2014/10/21 Python
Python Socket使用实例
2017/12/18 Python
python检测IP地址变化并触发事件
2018/12/26 Python
python 定时器,轮询定时器的实例
2019/02/20 Python
Django实现微信小程序的登录验证功能并维护登录态
2019/07/04 Python
Python3实现汉语转换为汉语拼音
2019/07/08 Python
python 动态绘制爱心的示例
2020/09/27 Python
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
2018/09/19 HTML / CSS
加利福尼亚州威尼斯的女性奢侈品设计师服装和概念店:Mona Moore
2018/09/13 全球购物
技术总监个人的自我评价范文
2013/12/18 职场文书
职工运动会邀请函
2014/02/02 职场文书
领班岗位职责范文
2014/02/06 职场文书
不错的求职信范文
2014/07/20 职场文书
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
2022/08/14 Servers