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 Web开发框架Django
Jun 30 Python
python实现定时同步本机与北京时间的方法
Mar 24 Python
用Python的Django框架完成视频处理任务的教程
Apr 02 Python
django+js+ajax实现刷新页面的方法
May 22 Python
Python实现的快速排序算法详解
Aug 01 Python
python实现媒体播放器功能
Feb 11 Python
如何利用python制作时间戳转换工具详解
Sep 12 Python
基于python实现高速视频传输程序
May 05 Python
正则给header的冒号两边参数添加单引号(Python请求用)
Aug 09 Python
Python @property使用方法解析
Sep 17 Python
python使用matplotlib绘制雷达图
Oct 18 Python
Django模板获取field的verbose_name实例
May 19 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 方便水印和缩略图的图形类
2009/05/21 PHP
PHP 时间转换Unix时间戳代码
2010/01/22 PHP
PHP设置进度条的方法
2015/07/08 PHP
CodeIgniter配置之autoload.php自动加载用法分析
2016/01/20 PHP
php编译安装php-amq扩展简明教程
2016/06/25 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
jQuery技巧总结
2011/01/01 Javascript
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
js清空表单数据的两种方式(遍历+reset)
2014/07/18 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
vue.js入门教程之计算属性
2016/09/01 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
2016/11/30 Javascript
vue绑定class的三种方法
2020/12/24 Vue.js
Python 命令行参数sys.argv
2008/09/06 Python
浅谈Python生成器generator之next和send的运行流程(详解)
2017/05/08 Python
Python 自动化表单提交实例代码
2017/06/08 Python
TensorFlow实现AutoEncoder自编码器
2018/03/09 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
2018/06/11 Python
我喜欢你 抖音表白程序python版
2019/04/07 Python
python 实现识别图片上的数字
2019/07/30 Python
python实现的发邮件功能示例
2019/09/11 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
django使用F方法更新一个对象多个对象字段的实现
2020/03/28 Python
selenium+python实现基本自动化测试的示例代码
2021/01/27 Python
汽车检测与维修个人求职信
2013/09/24 职场文书
机械专业求职信
2014/05/25 职场文书
检讨书怎么写
2015/05/07 职场文书
入党转正申请报告
2015/05/15 职场文书
纪录片信仰观后感
2015/06/08 职场文书
pandas 实现将NaN转换为None
2021/05/14 Python
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技