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 相关文章推荐
使用Python的Bottle框架写一个简单的服务接口的示例
Aug 25 Python
Python编程中time模块的一些关键用法解析
Jan 19 Python
Python设计模式编程中解释器模式的简单程序示例分享
Mar 02 Python
Python2.7 实现引入自己写的类方法
Apr 29 Python
对python3中, print横向输出的方法详解
Jan 28 Python
python实现得到当前登录用户信息的方法
Jun 21 Python
Python+Pyqt实现简单GUI电子时钟
Feb 22 Python
Python 复平面绘图实例
Nov 21 Python
tensorflow实现训练变量checkpoint的保存与读取
Feb 10 Python
keras处理欠拟合和过拟合的实例讲解
May 25 Python
python中的yield from语法快速学习
Nov 06 Python
用python制作个视频下载器
Feb 01 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实现MySQL更新记录的代码
2008/06/07 PHP
让你成为更出色的PHP开发者的10个技巧
2011/02/25 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
2019/04/11 PHP
PHP copy函数使用案例代码解析
2020/09/01 PHP
jquery简单体验
2007/01/10 Javascript
JavaScript 拖拉缩放效果
2008/12/10 Javascript
jQuery 获取对象 定位子对象
2010/05/31 Javascript
JS+CSS实现的经典tab选项卡效果代码
2015/09/16 Javascript
Jquery Mobile 自定义按钮图标
2015/11/18 Javascript
解析利用javascript如何判断一个数为素数
2016/12/08 Javascript
jquery插件bootstrapValidator表单验证详解
2016/12/15 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
详谈jQuery.load()和Jsp的include的区别
2017/04/12 jQuery
浅谈Angular HttpClient简单入门
2018/05/04 Javascript
jQuery插件Validation表单验证详解
2018/05/26 jQuery
JavaScript Canvas实现验证码
2020/08/02 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
原生javascript运动函数的封装示例【匀速、抛物线、多属性的运动等】
2020/02/23 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
一行JavaScript代码如何实现瀑布流布局
2020/12/11 Javascript
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
2020/12/24 Javascript
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
python绘制多个子图的实例
2019/07/07 Python
python和c语言哪个更适合初学者
2020/06/22 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
一款纯css3实现的响应式导航
2014/10/31 HTML / CSS
日本亚马逊官方网站:Amazon.co.jp
2020/04/14 全球购物
研究生求职推荐信范文
2013/11/30 职场文书
第二批党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
求职自我评价范文100字
2014/09/23 职场文书
学校政风行风评议工作总结
2014/10/21 职场文书
Golang全局变量加锁的问题解决
2021/05/08 Golang