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实现TCP服务器端与客户端的方法详解
Apr 30 Python
python numpy函数中的linspace创建等差数列详解
Oct 13 Python
Python字符串拼接六种方法介绍
Dec 18 Python
Python3之读取连接过的网络并定位的方法
Apr 22 Python
python实现京东秒杀功能
Jul 30 Python
pycharm 取消默认的右击运行unittest的方法
Nov 29 Python
使用python实现mqtt的发布和订阅
May 05 Python
解决Numpy中sum函数求和结果维度的问题
Dec 06 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
Jul 02 Python
python类共享变量操作
Sep 03 Python
python 模拟登录B站的示例代码
Dec 15 Python
Python+Opencv实现把图片、视频互转的示例
Dec 17 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 数组入门教程小结
2009/05/20 PHP
php实现利用phpexcel导出数据
2013/08/24 PHP
ThinkPHP路由详解
2015/07/27 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
2020/04/13 PHP
转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
2007/08/19 Javascript
jQuery获取当前对象标签名称的方法
2014/02/07 Javascript
js clearInterval()方法的定义和用法
2015/11/11 Javascript
JavaScript知识点整理
2015/12/09 Javascript
jQuery+PHP实现微信转盘抽奖功能的方法
2016/05/25 Javascript
Node.js 实现简单小说爬虫实例
2016/11/18 Javascript
清除输入框内的空格
2016/12/21 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
使用Fullpage插件快速开发整屏翻页的页面
2017/09/13 Javascript
vue-router的使用方法及含参数的配置方法
2018/11/13 Javascript
inquirer.js一个用户与命令行交互的工具详解
2019/05/18 Javascript
JS中的算法与数据结构之字典(Dictionary)实例详解
2019/08/20 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
python删除列表内容
2015/08/04 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
python样条插值的实现代码
2018/12/17 Python
python实现两张图片拼接为一张图片并保存
2019/07/16 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
python文件编写好后如何实践
2020/07/07 Python
python pip如何手动安装二进制包
2020/09/30 Python
复古服装:RetroStage
2019/05/10 全球购物
印度电子产品购物网站:Vijay Sales
2021/02/16 全球购物
动物科学专业毕业生的自我评价
2013/11/29 职场文书
应用心理学个人的求职信
2013/12/08 职场文书
学习十八大坚定理想信念心得体会
2014/03/11 职场文书
初中班主任评语
2014/04/24 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
2014年教师个人工作总结
2014/11/10 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
基于Python实现西西成语接龙小助手
2022/08/05 Golang