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 相关文章推荐
linux环境下安装pyramid和新建项目的步骤
Nov 27 Python
python BeautifulSoup设置页面编码的方法
Apr 03 Python
Python二叉树定义与遍历方法实例分析
May 25 Python
Python自定义装饰器原理与用法实例分析
Jul 16 Python
Python运维自动化之nginx配置文件对比操作示例
Aug 29 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
Oct 28 Python
PyQt5实现简易电子词典
Jun 25 Python
Python简易版图书管理系统
Aug 12 Python
使用pyecharts生成Echarts网页的实例
Aug 12 Python
Python文件路径名的操作方法
Oct 30 Python
python进度条显示之tqmd模块
Aug 22 Python
Python3 多线程(连接池)操作MySQL插入数据
Jun 09 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
Zend公司全球首推PHP认证
2006/10/09 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
2014/08/11 PHP
PHP网页安全认证的实例详解
2017/09/28 PHP
javascript 二维数组的实现与应用
2010/03/16 Javascript
JavaScript中两种链式调用实现代码
2011/01/12 Javascript
jQuery autocomplate 自扩展插件、自动完成示例代码
2011/03/28 Javascript
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
2013/12/16 Javascript
Javascript数组与字典用法分析
2014/12/13 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
2015/10/29 Javascript
由浅入深剖析Angular表单验证
2016/07/14 Javascript
初识简单却不失优雅的Vue.js
2016/09/12 Javascript
Bootstrap 表单验证formValidation 实现远程验证功能
2017/05/17 Javascript
Easyui在treegrid添加控件的实现方法
2017/06/23 Javascript
JavaScript比较同一天的时间大小实例代码
2018/02/09 Javascript
Element-ui table中过滤条件变更表格内容的方法
2018/03/02 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
2019/05/03 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
JS数组方法slice()用法实例分析
2020/01/18 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
2020/04/29 Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
2020/08/03 Javascript
Python的函数的一些高阶特性
2015/04/27 Python
python使用PyGame模块播放声音的方法
2015/05/20 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
实例讲解Python中浮点型的基本内容
2019/02/11 Python
浅谈Python 递归算法指归
2019/08/22 Python
区分python中的进程与线程
2020/08/13 Python
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
药剂专业学生求职信范文
2013/12/28 职场文书
七年级地理教学反思
2014/01/26 职场文书
动员大会主持词
2014/03/20 职场文书
辞旧迎新演讲稿
2014/09/15 职场文书
2014小学数学教研组工作总结
2014/12/06 职场文书
阳光体育运动标语口号
2015/12/26 职场文书
2016年万圣节活动个人总结
2016/04/05 职场文书
微信小程序和php的登录实现
2021/04/01 PHP