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 socket网络编程步骤详解(socket套接字使用)
Dec 06 Python
python实现的简单猜数字游戏
Apr 04 Python
Python生成随机验证码的两种方法
Dec 22 Python
Python爬虫信息输入及页面的切换方法
May 11 Python
利用Python进行图像的加法,图像混合(附代码)
Jul 14 Python
django 快速启动数据库客户端程序的方法示例
Aug 16 Python
python tkinter组件使用详解
Sep 16 Python
pytorch torch.expand和torch.repeat的区别详解
Nov 05 Python
Python 私有化操作实例分析
Nov 21 Python
如何使用Python发送HTML格式的邮件
Feb 11 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
Apr 07 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
Jan 21 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
phpmyadmin的#1251问题
2006/11/25 PHP
php 面向对象的一个例子
2011/04/12 PHP
php sybase_fetch_array使用方法
2014/04/15 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
简单的pgsql pdo php操作类实现代码
2016/08/25 PHP
Yii2中添加全局函数的方法分析
2017/05/04 PHP
php中时间函数date及常用的时间计算
2017/05/12 PHP
PHP PDOStatement::execute讲解
2019/01/31 PHP
Laravel使用原生sql语句并调用的方法
2019/10/09 PHP
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
JQuery之拖拽插件实现代码
2011/04/14 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
基于jQuery判断两个元素是否有重叠部分的代码
2012/07/25 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
2012/10/11 Javascript
jQuery自带的一些常用方法总结
2014/09/03 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
js+html5实现canvas绘制网页时钟的方法
2016/05/21 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
2017/09/21 Javascript
jQuery访问浏览器本地存储cookie、localStorage和sessionStorage的基本用法
2017/10/20 jQuery
PHP实现基于Redis的MessageQueue队列封装操作示例
2019/02/02 Javascript
深入解析Python中的WSGI接口
2015/05/11 Python
在Python中使用正则表达式的方法
2015/08/13 Python
python去除文件中空格、Tab及回车的方法
2016/04/12 Python
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
Python下载网络文本数据到本地内存的四种实现方法示例
2018/02/05 Python
Flask之请求钩子的实现
2018/12/23 Python
白色公司:The White Company
2017/10/11 全球购物
公务员政审个人鉴定
2014/02/25 职场文书
厕所文明标语
2014/06/11 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
纪录片信仰观后感
2015/06/08 职场文书
文化苦旅读书笔记
2015/06/29 职场文书
赞美教师的句子
2019/09/02 职场文书
解决Navicat for Mysql连接报错1251的问题(连接失败)
2021/05/27 MySQL