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的lambda匿名函数的简单介绍
Apr 25 Python
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
Nov 19 Python
Python批量重命名同一文件夹下文件的方法
May 25 Python
Django学习笔记之ORM基础教程
Mar 27 Python
python3+dlib实现人脸识别和情绪分析
Apr 21 Python
python爬虫之自动登录与验证码识别
Jun 15 Python
pygame游戏之旅 添加icon和bgm音效的方法
Nov 21 Python
在Python中关于使用os模块遍历目录的实现方法
Jan 03 Python
python 求10个数的平均数实例
Dec 16 Python
django列表筛选功能的实现代码
Mar 27 Python
CentOS 7如何实现定时执行python脚本
Jun 24 Python
pycharm如何设置官方中文(如何汉化)
Dec 29 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
一个php作的文本留言本的例子(五)
2006/10/09 PHP
用PHP和ACCESS写聊天室(二)
2006/10/09 PHP
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
php 静态化实现代码
2009/03/20 PHP
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
3个PHP多维数组转为一维数组的方法实例
2014/03/13 PHP
php中的explode()函数实例介绍
2019/01/18 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
jQuery Validation插件remote验证方式的Bug解决
2010/07/01 Javascript
window.open关于浏览器拦截问题分析及解决方法
2013/02/05 Javascript
JavaScript通过元素的ID和name设置样式
2014/07/08 Javascript
JS实现仿QQ效果的三级竖向菜单
2015/09/25 Javascript
JavaScript+CSS无限极分类效果完整实现方法
2015/12/22 Javascript
AngularJs Dependency Injection(DI,依赖注入)
2016/09/02 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
2016/10/28 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
[02:57]DOTA2亚洲邀请赛 SECRET战队出场宣传片
2015/02/07 DOTA
python计算书页码的统计数字问题实例
2014/09/26 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
2020/09/24 Python
CSS3中动画属性transform、transition和animation属性的区别
2016/09/25 HTML / CSS
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
销售人员职业生涯规划范文
2014/03/01 职场文书
经典促销广告词大全
2014/03/19 职场文书
建筑管理专业求职信
2014/07/28 职场文书
法人单位授权委托书范文
2014/10/06 职场文书
格林童话读书笔记
2015/06/30 职场文书
大学生读书笔记大全
2015/07/01 职场文书
公司联欢会主持词
2015/07/04 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL
MySQL中B树索引和B+树索引的区别详解
2022/03/03 MySQL