原文转载自「刘悦的技术博客」https://v3u.cn/a_id_153

首先明确一点,celery4.1+的官方文档已经详细说明,该版本之后不需要引入依赖 django-celery 这个库了,直接用 celery 本身就可以了,就在去年年初的一篇文章python3.7.2+Django2.0.4 使用django-celery遇到的那些坑,中提到的一些bug,在今年早已不复存在,所以技术更新频率越来越快,本文详细阐述用新版Celery(4.4.2)来实现。

关于celery的底层原理这里就不赘述了,简单的流程图就可以一图以蔽之

安装对应的库

pip3 install celery==4.4.2
pip3 install eventlet==0.25.2
pip3 install Django==2.0.4

eventlet是一个高性能协程库,用来解决win10下celery进程的bug

配置settings.py文件:

CELERY_BROKER_URL = 'redis://localhost:6379/'  

CELERY_RESULT_BACKEND = 'redis://localhost:6379/'  

CELERY_RESULT_SERIALIZER = 'json'

这里broker配置redis,同时backend也就是任务结果也存到redis中,格式为json,方便读写。

在settings.py同级目录创建celery.py

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery # 设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mydjango.settings') # 注册Celery的APP
app = Celery('mydjango')
# 绑定配置文件
app.config_from_object('django.conf:settings', namespace='CELERY') # 自动发现各个app下的tasks.py文件
app.autodiscover_tasks()

注意mydjango为你当前的django项目名称

修改settings.py同级目录的init.py文件

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app #导包
import pymysql
#初始化
pymysql.install_as_MySQLdb() __all__ = ['celery_app']

在应用中创建tasks.py文件

from celery.task import task  

# 自定义要执行的task任务
@task
def print_test():
print("nict try")
return 'hello'

如果需要,也可以在settings.py里将该任务配置为定时任务(周期任务)

from celery.schedules import crontab
CELERY_BEAT_SCHEDULE = {
# 周期性任务
'task-one': {
'task': 'myapp.tasks.print_test',
'schedule': 5.0, # 每5秒执行一次
# 'args': ()
}
}

同时异步任务也可以通过django的视图进行在线调用

from myapp import tasks  

def ctest(request,*args,**kwargs):
res=tasks.print_test.delay()
#任务逻辑
return JsonResponse({'status':'successful','task_id':res.task_id})

这里的delay方法就是异步方式请求,而非django默认的同步执行步骤

在manage.py的目录下启动celery服务

celery worker -A mydjango -l info -P eventlet

在浏览器中调用异步服务接口

同时也可以在backend中查询任务结果

注意一点,redis中的key并不是单纯的task_id,而是需要加上前缀celery-task-meta-

最后,如果需要启动定时任务,就需要在manage.py所在的文件夹内单独启动beat服务

celery -A mydjango beat -l info

可以看到任务队列会每隔五秒执行一次定时任务

总体而言,Celery4.4.2解决了很多bug,比如著名的async关键字的问题,同时优化了性能,在eventlet协程库的加持下,更加如虎添翼,准入门槛也比以前低了不少。

原文转载自「刘悦的技术博客」 https://v3u.cn/a_id_153

Win10系统下使用Django2.0.4+Celery4.4.2+Redis来实现异步任务队列以及定时(周期)任务(2020年最新攻略)的更多相关文章

  1. Win10系统下安装编辑器之神(The God of Editor)Vim并且构建Python生态开发环境(2020年最新攻略)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_160 众神殿内,依次坐着Editplus.Atom.Sublime.Vscode.JetBrains家族.Comodo等等一众编辑 ...

  2. C语言——Win10系统下安装VC6.0教程

    学习一门语言最重要的一步是搭建环境,许多人搭建在搭建环境上撞墙了,就有些放弃的心理了:俗话说,工欲善其事,必先利其器:所以接下来我们进行学习C的第一步搭建环境; 第一步:先解压我们下载好的VC6.0软 ...

  3. Win10系统下安装VC6.0教程

    学习一门语言最重要的一步是搭建环境,许多人搭建在搭建环境上撞墙了,就有些放弃的心理了:俗话说,工欲善其事,必先利其器:所以接下来我们进行学习C的第一步下载编程所用的工具;当然也有其它的软件,只不过初学 ...

  4. Win10环境下使用Flask配合Celery异步推送实时/定时消息(Socket.io)/2020年最新攻略

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_163 首先得明确一点,和Django一样,在2020年Flask 1.1.1以后的版本都不需要所谓的三方库支持,即Flask-Ce ...

  5. Win10系统下的Tomcat7.0配置

    为什么不用更高版本的Tomcat呢?好几个老师都说7.0的版本最好用,所以就推荐用这个.安Tomcat之前,我电脑上装的是jdk 9,安装了好几次Apache都不能启动,日志显示的是"启动报 ...

  6. Docker在手,天下我有,在Win10系统下利用Docker部署Gunicorn+Flask打造独立镜像

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_164 书接上回,之前一篇:Win10环境下使用Flask配合Celery异步推送实时/定时消息(Socket.io)/2020年最 ...

  7. Win10系统下软件UI显示不完整解决方案

    在最初升级win10的时候就想到了这些问题,例如和各种软件的不兼容性.当然,事实上win10并没有想象的那么糟,作为一个windows user 来说,win10的确是很高大上的,无论是颜值或者是体验 ...

  8. Win10系统下安装ubuntu16.04双系统-常见问题解答

    Win10系统下安装ubuntu16.04双系统-常见问题解答 1. 安装ubuntu16.04.2系统 磁盘分区形式有两种:GPT和MBR,关系到设置引导项.在win10下压缩出500GB空间给ub ...

  9. Xmind pro Win10系统下安装问题解决与破解

    Xmind pro Win10系统下安装问题解决与破解 1.下载安装版本 解压包含文件: xmind-8-update7-windows--安装包 和XMindCrack.jar--激活破解工具 2. ...

随机推荐

  1. django 备件管理系统

    views 1 class limit: 2 3 def limit(self,res,obj): 4 limit = int(res.GET.get('limit',1)) 5 pagelimit ...

  2. 提升站点SEO的7个建议

    1.使用HTTPS 谷歌曾发公告表示,使用安全加密协议(HTTPS),是搜索引擎排名的一项参考因素. 所以,在域名相同情况下,HTTPS站点比HTTP站点,能获得更好的排名. 在网络渠道分发或合作上, ...

  3. 109_Power Pivot客户ABC(帕累托)分析度量值写法(非计算列)

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 1.背景 客户ABC分析,一般的套路是在计算列中把客户ABC分类,便于后续维度使用.今天用度量值的方式写一个ABC的分类. ...

  4. v87.01 鸿蒙内核源码分析 (内核启动篇) | 从汇编到 main () | 百篇博客分析 OpenHarmony 源码

    本篇关键词:内核重定位.MMU.SVC栈.热启动.内核映射表 内核汇编相关篇为: v74.01 鸿蒙内核源码分析(编码方式) | 机器指令是如何编码的 v75.03 鸿蒙内核源码分析(汇编基础) | ...

  5. Go微服务框架go-kratos实战02:proto 代码生成和编码实现步骤

    在上一篇 kratos quickstart 文章中,我们直接用 kratos new 命令生成了一个项目. 这一篇来看看 kratos API 的定义和使用. 一.kratos 中 API 简介 1 ...

  6. 从零开始构建并编写神经网络---Keras【学习笔记】[1/2]

    Keras简介:   Keras是由纯python编写的基于theano/tensorflow的深度学习框架.   Keras是一个高层神经网络API,支持快速实验,能够把你的idea迅速转换为结果, ...

  7. ROS基本程序实现

    0.前言 现在介绍ROS基本程序实现的教程有很多,步骤无非就是建工作空间,编译,创建功能包,创建文件和修改CMakeList,之后再编译.运行程序这几步.但是这些教程中很多在文件夹切换的很混乱,导致会 ...

  8. GraphX 图计算实践之模式匹配抽取特定子图

    本文首发于 Nebula Graph Community 公众号 前言 Nebula Graph 本身提供了高性能的 OLTP 查询可以较好地实现各种实时的查询场景,同时它也提供了基于 Spark G ...

  9. python中collections.OrderedDict()

    import collections #from collections import OrderededDict my_orderDict=collections.OrderedDict(house ...

  10. 如何优雅的使用MyBatis?

    ​本文目录 什么是 MyBatis ? 映射器(mappers) typeAliases 类型别名减少类完全限制名的冗余 处理枚举类型 多行插入 重用 SQL 代码段,消除重复 字符串替换#{}和${ ...