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中操作文件之write()方法的使用教程
May 25 Python
python实现汉诺塔方法汇总
Jul 25 Python
python中星号变量的几种特殊用法
Sep 07 Python
Python 2与Python 3版本和编码的对比
Feb 14 Python
Python中functools模块函数解析
Mar 12 Python
深入浅析python 中的匿名函数
May 21 Python
python得到qq句柄,并显示在前台的方法
Oct 14 Python
django框架创建应用操作示例
Sep 26 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
Mar 09 Python
django 多数据库及分库实现方式
Apr 01 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
Apr 22 Python
python爬虫中url管理器去重操作实例
Nov 30 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实现手机号码中间四位用星号(*)隐藏的自定义函数分享
2014/09/27 PHP
php上传文件并存储到mysql数据库的方法
2015/03/16 PHP
php查询mysql数据库并将结果保存到数组的方法
2015/03/18 PHP
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
AngularJS实现表单手动验证和表单自动验证
2015/12/09 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
bootstrap模态框跳转到当前模板页面 框消失了而背景存在问题的解决方法
2020/11/30 Javascript
js Canvas实现的日历时钟案例分享
2016/12/25 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
2017/07/04 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
[01:09:40]Newbee vs Pain 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python使用函数默认值实现函数静态变量的方法
2014/08/18 Python
python执行外部程序的常用方法小结
2015/03/21 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
django+echart绘制曲线图的方法示例
2018/11/26 Python
python 梯度法求解函数极值的实例
2019/07/10 Python
Python字典推导式将cookie字符串转化为字典解析
2019/08/10 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
在Mac中PyCharm配置python Anaconda环境过程图解
2020/03/11 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
2020/09/16 Python
Python eval函数介绍及用法
2020/11/09 Python
英国独特的时尚和生活方式品牌:JOY
2018/03/17 全球购物
Footshop乌克兰:运动鞋的最大选择
2019/12/01 全球购物
电工工作职责范本
2014/02/22 职场文书
物业总经理助理岗位职责
2014/06/29 职场文书
2015自愿离婚协议书范本
2015/01/28 职场文书
介绍长城的导游词
2015/01/30 职场文书
maven依赖的version声明控制方式
2022/01/18 Java/Android