原文转载自「刘悦的技术博客」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的底层原理这里就不赘述了,简单的流程图就可以一图以蔽之

安装对应的库

  1. pip3 install celery==4.4.2
  2. pip3 install eventlet==0.25.2
  3. pip3 install Django==2.0.4

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

配置settings.py文件:

  1. CELERY_BROKER_URL = 'redis://localhost:6379/'
  2. CELERY_RESULT_BACKEND = 'redis://localhost:6379/'
  3. CELERY_RESULT_SERIALIZER = 'json'

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

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

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

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

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

  1. from __future__ import absolute_import, unicode_literals
  2. from .celery import app as celery_app
  3. #导包
  4. import pymysql
  5. #初始化
  6. pymysql.install_as_MySQLdb()
  7. __all__ = ['celery_app']

在应用中创建tasks.py文件

  1. from celery.task import task
  2. # 自定义要执行的task任务
  3. @task
  4. def print_test():
  5. print("nict try")
  6. return 'hello'

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

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

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

  1. from myapp import tasks
  2. def ctest(request,*args,**kwargs):
  3. res=tasks.print_test.delay()
  4. #任务逻辑
  5. return JsonResponse({'status':'successful','task_id':res.task_id})

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

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

  1. celery worker -A mydjango -l info -P eventlet

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

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

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

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

  1. 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. 手动搭建简易web框架与django框架简介

    目录 纯手写简易web框架 基于wsgiref模块 动静态网页 简单了解jinja2模块 框架请求流程 python主流web框架 django框架 简介 应用app 命令操作django pycha ...

  2. Python数据分析--Numpy常用函数介绍(3)

    摘要:先汇总相关股票价格,然后有选择地对其分类,再计算移动均线.布林线等. 一.汇总数据 汇总整个交易周中从周一到周五的所有数据(包括日期.开盘价.最高价.最低价.收盘价,成交量等),由于我们的数据是 ...

  3. ES6 - promise(1)

    今天决定对之前学过的一些前端的知识进行梳理和总结,因为最近都是独自承担项目的开发与搭建,所以先从前后端交互的第一线axios来梳理,复习axios首先一定要先复习promise对象. 什么是promi ...

  4. 用STM32玩OLED(显示文字、图片、动图gif等)

    目录 用STM32玩OLED(显示文字.图片.动图gif等) 1. 显示字符串 2. 显示中文 3. 显示图片 4. 显示动图 5. 总结测试 用STM32玩OLED(显示文字.图片.动图gif等) ...

  5. golang的defer踩坑汇总

    原文链接:http://www.zhoubotong.site/post/50.html defer语句用于延迟函数调用,每次会把一个函数压入栈中,函数返回前再把延迟的函数取出并执行.延迟函数可以有参 ...

  6. 22.LVS+Keepalived 高可用群集

    LVS+Keepalived 高可用群集 目录 LVS+Keepalived 高可用群集 keepalived工具介绍 Keepalived实现原理剖析 VRRP(虚拟路由冗余协议) VRRP 相关术 ...

  7. 下载nltk数据包报错

    安装nltk需要两步:安装nltk和安装nltk_data数据包 安装nltk 安装nltk很简单,可以直接在pycharm环境中安装,flie -> settings-> Python ...

  8. SAP 实例 5 CFW Events

    REPORT demo_custom_control . * Declarations ***************************************************** CL ...

  9. 用WindowsAppSDK(WASDK)优雅的开发上位机应用

    C#开发上位机应用的一些选择 如果你不想看介绍,可以直接跳到优雅开发示例那里. 1. WASDK(WinUI 3) Windows 应用 SDK 是一组新的开发人员组件和工具,它们代表着 Window ...

  10. SQL SERVER 算法面试题,自己再插入数据时,本想一次性复制10条数据,结果变成了1024条。产生一个算法bug,最后记录一下