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利用dir函数查看类中所有成员函数示例代码
Sep 08 Python
Flask之请求钩子的实现
Dec 23 Python
python flask解析json数据不完整的解决方法
May 26 Python
使用python制作一个为hex文件增加版本号的脚本实例
Jun 12 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
Jun 13 Python
Django 实现前端图片压缩功能的方法
Aug 07 Python
tensorflow 报错unitialized value的解决方法
Feb 06 Python
Django框架获取form表单数据方式总结
Apr 22 Python
Python基于pip实现离线打包过程详解
May 15 Python
详解Pytorch显存动态分配规律探索
Nov 17 Python
python 6种方法实现单例模式
Dec 15 Python
pytest进阶教程之fixture函数详解
Mar 29 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
MySQL中create table语句的基本语法是
2007/01/15 PHP
PHP header()函数常用方法总结
2014/04/11 PHP
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
jquery 分页控件实现代码
2009/11/30 Javascript
javascript suggest效果 自动完成实现代码分享
2012/02/17 Javascript
document.forms[].submit()使用介绍
2014/02/19 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
2015/10/15 Javascript
js+ajax实现获取文件大小的方法
2015/12/08 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
浅谈JS函数节流防抖
2017/10/18 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
2018/06/25 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
原生Vue 实现右键菜单组件功能
2019/12/16 Javascript
js实现数字滚动特效
2019/12/16 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
2020/01/03 Javascript
如何通过JS实现转码与解码
2020/02/21 Javascript
vue实现在线学生录入系统
2020/05/30 Javascript
JavaScript仿京东轮播图效果
2021/02/25 Javascript
[49:27]LGD vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
python读取word文档的方法
2015/05/09 Python
tensorflow创建变量以及根据名称查找变量
2018/03/10 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
2018/12/10 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
Python中Unittest框架的具体使用
2019/08/27 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
2020/01/25 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
鞋子女王塔玛拉·梅隆同名奢侈品牌:Tamara Mellon
2017/11/22 全球购物
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
爱心捐款倡议书
2014/04/14 职场文书
城管大队整治方案
2014/05/06 职场文书
办理房产证委托书
2014/09/18 职场文书
ajax请求前端跨域问题原因及解决方案
2021/10/16 Javascript