Django celery异步任务实现代码示例


Posted in Python onNovember 26, 2020

最近项目中用到celery很多,Django快速接入celery,这里给份教程。

准备

pip安装celery、flower、eventlet

Django celery异步任务实现代码示例

快速接入

1.项目目录的__init__文件

from __future__ import absolute_import

# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celerypro import app as celery_app

2.celerypro.py文件

from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'voice_quality_assurance_configure.settings') #修改项目配置文件的地址
app = Celery('voice_quality_assurance_configure') #修改项目目录名称
# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('voice_quality_assurance_configure.celeryconfig') #修改celery配置文件的地址
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

3.celeryconfig.py文件,更多配置项,可以查看官方文档。

from kombu import Queue
BROKER_URL = 'amqp://用户名:密码@ip:5672'# 指定 Broker
CELERY_RESULT_BACKEND = 'rpc://用户名:密码@ip:5672'# 指定 Backend
CELERY_TIMEZONE='Asia/Shanghai'# 指定时区,默认是 UTC
CELERY_TASK_SERIALIZER = 'pickle'
CELERY_RESULT_SERIALIZER = 'pickle'
CELERY_ACCEPT_CONTENT = ['pickle', 'json']
CELERY_IGNORE_RESULT = True
# CELERY_TIMEZONE='UTC'
CELERY_IMPORTS = (
  # 指定导入的任务模块
  'apps.mission.tasks'
)
CELERY_QUEUES = (
  Queue('default', routing_key='default'), #声明队列和对应路由键
  Queue('worker_queue', routing_key='worker'), #声明队列和对应路由键
)
CELERY_ROUTES = {
  'apps.mission.tasks.createsingletask': {'queue': 'worker_queue', 'routing_key': 'worker'},
}

app代码如何使用

app下新建tasks.py文件,名字一定要是tasks。(我这里是mission app下的tasks.py)

from celery import shared_task
@shared_task()
def createsingletask():
  print(test)

app下views调用如下:(我这里是mission app下的views.py)

from .tasks import createsingletask

createsingletask.apply_async(())

快速测试和监控

启动多个celery worker,-A 指定项目目录, -P 指定方式,我这里以协程方式运行, -n指定name

celery worker -A voice_quality_assurance_configure --loglevel=info -P eventlet -n worker1
celery worker -A voice_quality_assurance_configure --loglevel=info -P eventlet -n worker2
celery worker -A voice_quality_assurance_configure --loglevel=info -P eventlet -n worker3
celery worker -A voice_quality_assurance_configure --loglevel=info -P eventlet -n worker4
celery worker -A voice_quality_assurance_configure --loglevel=info -P eventlet -n worker5

启动flower监控

celery flower --broker=amqp://用户名:密码@ip:5672 --broker-api=http://用户名:密码@ip:15672/api/

查看监控,注意这里的监控数据是不持久化的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 正则表达式(转义问题)
Dec 15 Python
jupyter安装小结
Mar 13 Python
python实现自动发送邮件发送多人、群发、多附件的示例
Jan 23 Python
使用实现pandas读取csv文件指定的前几行
Apr 20 Python
python 限制函数调用次数的实例讲解
Apr 21 Python
用python写扫雷游戏实例代码分享
May 27 Python
替换python字典中的key值方法
Jul 06 Python
Python函数式编程指南:对生成器全面讲解
Nov 19 Python
python实现大战外星人小游戏实例代码
Dec 26 Python
python中前缀运算符 *和 **的用法示例详解
May 28 Python
Python 字典中的所有方法及用法
Jun 10 Python
django使用channels实现通信的示例
Oct 19 Python
Django通过设置CORS解决跨域问题
Nov 26 #Python
Django利用elasticsearch(搜索引擎)实现搜索功能
Nov 26 #Python
python模拟点击在ios中实现的实例讲解
Nov 26 #Python
如何在 Matplotlib 中更改绘图背景的实现
Nov 26 #Python
python 实现超级玛丽游戏
Nov 25 #Python
python 制作简单的音乐播放器
Nov 25 #Python
python中绕过反爬虫的方法总结
Nov 25 #Python
You might like
ThinkPHP实现附件上传功能
2017/04/27 PHP
JSQL 批量图片切换的实现代码
2010/05/05 Javascript
js下利用控制器载入对应脚本
2010/07/17 Javascript
js实现两个值相加alert出来精确到指定位
2013/09/25 Javascript
JS中Date日期函数中的参数使用介绍
2014/01/02 Javascript
js调试系列 初识控制台
2014/06/18 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
js+css实现文字散开重组动画特效代码分享
2015/08/21 Javascript
使用AJAX实现Web页面进度条的实例分享
2016/05/06 Javascript
JS实现简单的二元方程计算器功能示例
2017/01/03 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
vue头部导航动态点击处理方法
2018/11/02 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
解决vue一个页面中复用同一个echarts组件的问题
2020/07/19 Javascript
[44:51]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第二场
2018/04/05 DOTA
python求斐波那契数列示例分享
2014/02/14 Python
跟老齐学Python之复习if语句
2014/10/02 Python
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
英国快时尚女装购物网站:PrettyLittleThing
2018/08/15 全球购物
Levi’s西班牙官方网站:李维斯,著名的牛仔裤品牌
2020/08/20 全球购物
迟到早退检讨书
2014/02/10 职场文书
2014年单位植树节活动方案
2014/03/23 职场文书
职工代表大会主持词
2014/04/01 职场文书
大学活动总结范文
2014/04/29 职场文书
医院标语大全
2014/06/23 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
2015年考研复习计划
2015/01/19 职场文书
工程项目合作意向书
2015/05/08 职场文书
2015迎新晚会活动总结
2015/07/16 职场文书
PHP基本语法
2021/03/31 PHP
Python中for后接else的语法使用
2021/05/18 Python
Javascript设计模式之原型模式详细
2021/10/05 Javascript