Django异步任务之Celery的基本使用


Posted in Python onMarch 23, 2019

Celery

许多Django应用需要执行异步任务, 以便不耽误http request的执行. 我们也可以选择许多方法来完成异步任务, 使用Celery是一个比较好的选择, 因为Celery有着大量的社区支持, 能够完美的扩展, 和Django结合的也很好. Celery不仅能在Django中使用, 还能在其他地方被大量的使用. 因此一旦学会使用Celery, 我们可以很方便的在其他项目中使用它.

celery 是一个用于实现异步任务的库, 在很多项目中都使用它, 它和 django 融合使用很完美. 使用 celery 可以在实现 http request请求返回 view 前做一些我们想做的而且耗时的事情而不会让用户等待太久

环境

django 版本 == 1.11.6

celery 版本 == 3.1.25

安装

pip install django-celery
pip install celery

首先需要将 celery 添加到 django 项目的 settings 里, celery 任务和 django 需要一个 中间人(broker),,这里使用的是 django 自带的 broker, 但在生产中一般使用 rabbitmq, Redis 等,在 INSTALLED_APP 中需要添加 djcelery 和 kombu.transport.django, 还有 app 应用。

- project/project/ settings.py:

import djcelery

djcelery.setup_loader() 
BROKER_URL = 'django://'

INSTALLED_APP = (
 ...
 'app'
 'djcelery',
 'kombu.transport.django',
)

新建 celery.py 创建一个 celery 应用,并添加以下内容

- project/project/ celery.py:

# 相对路径导入, 防止导入 celery 时冲突
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings

# 让 celery 能找到 django 项目
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
# 创建一个 celery 应用
app = Celery('project')

# 导入配置
app.config_from_object('django.conf:settings')
# 自动发现 task
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

@app.task(bind=True)
def debug_task(self):

 print('Request: {0!r}'.format(self.request))

 

- project/project/ __init__.py:

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 .celery import app as celery_app

在 django app 中添加任务,文件名必须是 tasks.py, 在普通 python 函数前加一个 @task() 装饰器就变成了 celery task

-project/app/ tasks.py:

from celery.task import task
from time import sleep

@task()
def helloWorld():
 print 'helloWorld'
 sleep(10)
 print 'helloWorld'
 return 'helloCelery'

这样,一个任务就创建成功了,只剩下在 view 中调用了

-project/app view.py:

from tasks.py import helloWorld

def home():

 helloWorld.delay()

 return HttpResponse('helloCelery')

最后

python manage.py migrate

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
使用Protocol Buffers的C语言拓展提速Python程序的示例
Apr 16 Python
Python正则获取、过滤或者替换HTML标签的方法
Jan 28 Python
python 实时遍历日志文件
Apr 12 Python
在Python 不同级目录之间模块的调用方法
Jan 19 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
Apr 18 Python
Python之Numpy的超实用基础详细教程
Oct 23 Python
如何使用python3获取当前路径及os.path.dirname的使用
Dec 13 Python
python文件和文件夹复制函数
Feb 07 Python
python IDLE添加行号显示教程
Apr 25 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
Sep 16 Python
python解决OpenCV在读取显示图片的时候闪退的问题
Feb 23 Python
分析Python感知线程状态的解决方案之Event与信号量
Jun 16 Python
深入解析Python小白学习【操作列表】
Mar 23 #Python
Python基础之条件控制操作示例【if语句】
Mar 23 #Python
Python基础之循环语句用法示例【for、while循环】
Mar 23 #Python
详解python中sort排序使用
Mar 23 #Python
Python基础之函数的定义与使用示例
Mar 23 #Python
详解用Python练习画个美队盾牌
Mar 23 #Python
详解python中TCP协议中的粘包问题
Mar 22 #Python
You might like
PHP empty函数报错解决办法
2014/03/06 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
2014/08/19 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
也说JavaScript中String类的replace函数
2011/09/22 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
JS.elementGetStyle(element, style)应用示例
2013/09/24 Javascript
获得Javascript对象属性个数的示例代码
2013/11/21 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
关于js函数解释(包括内嵌,对象等)
2016/11/20 Javascript
javascript动画之磁性吸附效果篇
2016/12/09 Javascript
ES6新特性之变量和字符串用法示例
2017/04/01 Javascript
微信小程序 本地图片按照屏幕尺寸处理
2017/08/04 Javascript
vue实现页面加载动画效果
2017/09/19 Javascript
基于js 字符串indexof与search方法的区别(详解)
2017/12/04 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
Vue中的methods、watch、computed的区别
2018/11/26 Javascript
小程序中的箭头函数的具体使用
2020/06/19 Javascript
vue-model实现简易计算器
2020/08/17 Javascript
[51:52]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
2019/08/12 Python
python定义类的简单用法
2020/07/24 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
详解anaconda安装步骤
2020/11/23 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
欧洲最大的婴幼儿服装及内衣公司:Petit Bateau(小帆船)
2016/08/16 全球购物
工商治理实习生的自我评价
2014/01/15 职场文书
12月小学生校园广播稿
2014/02/04 职场文书
三万活动总结
2014/04/28 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
部队个人年终总结
2015/03/02 职场文书
鸦片战争观后感
2015/06/09 职场文书
SQL SERVER中常用日期函数的具体使用
2021/04/08 SQL Server
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang
5行Python代码实现一键批量扣图
2021/06/29 Python
vue+element ui实现锚点定位
2021/06/29 Vue.js
jdbc中自带MySQL 连接池实践示例
2022/07/23 MySQL