python django与celery的集成
一、celery与django
关于celery介绍和使用可以查看上篇Python中任务队列-芹菜celery的使用
关于django的介绍和使用可查看python django框架+vue.js前后端分离
我来看一下celery集成到django后的整个工作链:django将任务转发给消息队列,celery读取到任务后执行并将结果通过django ORM 存储。

在本文中两个插件:
- 使用
django-celery-results将celery处理结果进行ORM存储 - 使用
django-celery-beat对任务管理和周期调度
二、基本使用
1.创建一个django项目,不再赘述
建好后目录看起来是这样的
django_celery
├── celery_app
│ ├── __init__.py
│ ├── apps.py
│ ├── migrations/
│ ├── models.py
│ ├── admin.py
│ └── views.py
├── manage.py
├── django_celery
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── env/
│── db.sqlite3
安装插件
pip install django-celery-results
pip install django-celery-beat
在项目settings.py我们会安装appcelery_app、django_celery_results、django_celery_beat并开启我们的admin后台用于查看和管理我们的任务调度。
2.添加任务tasks.py
我们在celery_app中添加任务文件tasks.py其中包含上篇文章中单args_add1任务,并通过shared_task进行装饰。
from __future__ import absolute_import
from celery import shared_task
import time
@shared_task
def args_add1(x,y):
print("start task no.1 now!")
time.sleep(10)
print("task no.1 end!")
return x+y
3.配置celery应用
在django_celery目录下添加celery.py用于创建我们的celery应用
import os
from celery import Celery
#加载配置
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_celery.settings')
#创建celery app
app = Celery('django_celery')
app.config_from_object('django.conf:settings', namespace='CELERY')
#自动发现项目中的tasks
app.autodiscover_tasks()
在setting中添加celery相关配置,指定Broker和Backend。这里我们延用上篇的rabbitmq作为Broker,后端配置为django-db
CELERY_BROKER_URL = 'amqp://rabbit_user:rabbit_pass@i-k9pwet2d/rabbit_vhost'
CELERY_RESULT_BACKEND = 'django-db'
我们的celery应用配置好了,然后我们要启动它,在__init__.py中加入我们的app
from .celery import app as celery_app
__all__ = ['celery_app']
4.配置django
通过上面的配置我们有了celery应用,也有了任务,接下来我们配置一个URL请求来发送我们的任务给celery。
对我们app下views.py编写如下
from django.http import JsonResponse
from celery_app import tasks
from celery.result import AsyncResult
# Create your views here.
def celery(request,*args,**kwargs):
res=tasks.args_add1.delay(123,456) #发送任务给celery
result = AsyncResult(res.task_id)
return JsonResponse({'status':result.status,'task_id':result.task_id})
配置路由
from django.contrib import admin
from django.urls import path
import celery_app.views
urlpatterns = [
path('admin/', admin.site.urls),
path('celery/',celery_app.views.celery)
]
5.查看任务执行
通过上面配置我们基本款已经成了。我们启动django和celery worker看看
python manage.py migrate
python manage.py runserver
启动celery worker
celery -A django_celery worker --loglevel=info --concurrency=10
访问地址:http://127.0.0.1:8000/celery/ 发送我们的任务,此时任务已处于等待状态。

在worker终端上可以查看到任务正在被处理。

我们在django后台查看task执行记录和细节


三、周期性任务调度
在前面我们已经安装了django-celery-beat
我们在后台Periodic tasks中配置我们的周期性任务,也可以通过Crontab Schedule来配置计划任务。

我们配置一个每5小时执行一次的任务。

启动调度器,这样我们的任务就会在后台默默无闻的周期性工作啦。
celery -A django_celery beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
以上是celery集成到django中的基础使用。
文章有不足的地方欢迎指出。
欢迎收藏、点赞、提问。关注顶级饮水机管理员,除了管烧热水,有时还做点别的。
python django与celery的集成的更多相关文章
- Python中Celery 的基本用法以及Django 结合 Celery 的使用和实时监控进程
celery是什么 1 celery是一个简单,灵活且可靠的,处理大量消息的分布式系统 2 专注于实时处理的异步任务队列 3 同时也支持任务调度 执行流程 Celery 基本使用 tasks.py i ...
- [django]python异步神器-celery
python异步神器celery https://segmentfault.com/a/1190000007780963
- Django中Celery的实现介绍(一)
Django中Celery的实现 Celery官网http://www.celeryproject.org/ 学习资料:http://docs.jinkan.org/docs/celery/ Cele ...
- python django -6 常用的第三方包或工具
常用的第三方包或工具 富文本编辑器 缓存 全文检索 celery 布署 富文本编辑器 借助富文本编辑器,管理员能够编辑出来一个包含html的页面,从而页面的显示效果,可以由管理员定义,而不用完全依赖于 ...
- Django使用Celery进行异步任务
Celery Celery是一个功能完备即插即用的异步任务队列系统.它适用于异步处理问题,当发送邮件.或者文件上传, 图像处理等等一些比较耗时的操作,我们可将其异步执行,这样用户不需要等待很久,提高用 ...
- python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
python Django教程 之 模型(数据库).自定义Field.数据表更改.QuerySet API 一.Django 模型(数据库) Django 模型是与数据库相关的,与数据库相关的代码 ...
- python Django教程 之 安装、基本命令、视图与网站
python Django教程 之 安装.基本命令.视图与网站 一.简介 Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,通过减少重复的代码,Django 使你能够专注于 w ...
- Django 使用celery任务队列的配置
celery 情景:用户发起request,并等待response返回.在本些views中,可能需要执行一段耗时的程序,那么用户就会等待很长时间,造成不好的用户体验,比如发送邮件.手机验证码等. 使用 ...
- Django中Celery http请求异步处理(四)
Django中Celery http请求异步处理 本章延续celery之前的系列 1.settings配置 2.编写task jib_update_task任务为更新salt jid数据 3.url设 ...
随机推荐
- JVM-垃圾收集算法基础
目录 目录 前言 手动释放内存导致的问题 垃圾判定方法 哪些对象是垃圾? 引用计数算法 可达性分析法 垃圾收集算法 标记-清除 优点 缺点 优化 标记-复制 优点 缺点 优化 标记-整理 优点 缺点 ...
- Python3 url解码与参数解析
Python3 url解码与参数解析 有些子节点名字直接就是编码后的url,就像下面这行一样: url='dubbo%3A%2F%2F10.4.5.3%3A20880%2Fcom.welab.auth ...
- Docker学习(11) Dockerfile指令
Dockerfile指令 指令格式 FROM MAINTAINER RUN EXPOSE CMD ENTRYPOINT ADD COPY VOLUME WORKDIR ENV USER ONBUILD ...
- cachecloud生产环境搭建
步骤 1 机器管理 机器初始化Redis环境 添加机器 执行: cachecloud-init.sh脚本 2 cachecloud添加机器的时候需要添加一个用户cachecloud-open ad ...
- Go语言的GOPATH详解
在GOLAND中设置GOPATH: 设置好路径后,并不是直接在这个路径下面写代码文件就行了 GO会识别GOPATH下的src目录,而真正的引用的包名,是src下的目录名,然后才是代码模块名 目录结构如 ...
- 【.NET 与树莓派】温度/湿度传感器——SHT30
SHT3XX 系列的传感,常见的有三种:SHT 30.SHT 31.SHT 35.其中,比较便宜性价比较愉快的是 SHT 30. DHT 11 模块也是检测温度.湿度的,但SHT 11 使用的不是我们 ...
- 分布式Jmeter压测机的部署
部署 1.分布式配置 Master机Jmeter安装目录下/bin/jmeter.properties remote_hosts修改为slave压力机的IP 如 remote_hosts=10.0.4 ...
- jemeter压测, 高级应用: 发1万个请求,每个请求参数都不同, 使用CSV数据文件配置
今天接到一个压测任务, 数据源需要自己从测试环境库中取, 并且使用jemeter 请求, 每个请求参数都不相同 这里使用jemeter的 CSV数据文件来配置: 这样配置好后, 开始发送请求: csv ...
- 【VBA】类型转换
每个函数都可以强制将一个表达式转换成某种特定数据类型. 语法 CBool(expression) CByte(expression) CCur(expression) CDate(expression ...
- 一款基于SpringBoot+SpringSecurity的后台管理系统,强烈推荐
简介 Base Admin一套简单通用的后台管理系统,主要功能有:权限管理.菜单管理.用户管理,系统设置.实时日志,API加密,以及登录用户修改密码.配置个性菜单等. 技术栈 前端:Layui 后端: ...