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 相关文章推荐
haskell实现多线程服务器实例代码
Nov 26 Python
Python中还原JavaScript的escape函数编码后字符串的方法
Aug 22 Python
用Python实现一个简单的线程池
Apr 07 Python
Python基于PycURL实现POST的方法
Jul 25 Python
对python内置map和six.moves.map的区别详解
Dec 19 Python
python自定义函数实现最大值的输出方法
Jul 09 Python
python ftplib模块使用代码实例
Dec 31 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
Feb 05 Python
Python HTTP下载文件并显示下载进度条功能的实现
Apr 02 Python
Keras自定义实现带masking的meanpooling层方式
Jun 16 Python
Pycharm导入anaconda环境的教程图解
Jul 31 Python
Python高并发和多线程有什么关系
Nov 14 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版
2006/10/09 PHP
奇怪的PHP引用效率问题分析
2012/03/23 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
2020/08/07 PHP
jQuery使用手册之一
2007/03/24 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
谈谈关于JavaScript 中的 MVC 模式
2013/04/11 Javascript
js获取控件位置以及不同浏览器中的差别介绍
2013/08/08 Javascript
Jquery插件easyUi表单验证提交(示例代码)
2013/12/30 Javascript
javascript圆盘抽奖程序实现原理和完整代码例子
2014/06/03 Javascript
jquery实现submit提交表单
2015/02/03 Javascript
JavaScript获取网页中第一个链接ID的方法
2015/04/03 Javascript
简述AngularJS的控制器的使用
2015/06/16 Javascript
js代码实现无缝滚动(文字和图片)
2015/08/20 Javascript
Nodejs的express使用教程
2015/11/23 NodeJs
JSONObject使用方法详解
2015/12/17 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
vue2.0 自定义日期时间过滤器
2017/06/07 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
解决vue-cli + webpack 新建项目出错的问题
2018/03/20 Javascript
小程序中设置缓存过期的实现方法
2020/01/14 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
2020/02/05 Javascript
[03:59]5分钟带你了解什么是DOTA2(第二期)
2017/02/07 DOTA
python用来获得图片exif信息的库实例分析
2015/03/16 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法
2018/04/22 Python
Python 判断奇数偶数的方法
2018/12/20 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
2019/01/30 Python
pytorch 彩色图像转灰度图像实例
2020/01/13 Python
python异步Web框架sanic的实现
2020/04/27 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
语文教育专业推荐信范文
2013/11/25 职场文书
禁止高声喧哗的标语
2014/06/11 职场文书
大学课外活动总结
2014/07/09 职场文书
2015年仓库工作总结
2015/04/09 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书
Python实现照片卡通化
2021/12/06 Python