一、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_appdjango_celery_resultsdjango_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的集成的更多相关文章

  1. Python中Celery 的基本用法以及Django 结合 Celery 的使用和实时监控进程

    celery是什么 1 celery是一个简单,灵活且可靠的,处理大量消息的分布式系统 2 专注于实时处理的异步任务队列 3 同时也支持任务调度 执行流程 Celery 基本使用 tasks.py i ...

  2. [django]python异步神器-celery

    python异步神器celery https://segmentfault.com/a/1190000007780963

  3. Django中Celery的实现介绍(一)

    Django中Celery的实现 Celery官网http://www.celeryproject.org/ 学习资料:http://docs.jinkan.org/docs/celery/ Cele ...

  4. python django -6 常用的第三方包或工具

    常用的第三方包或工具 富文本编辑器 缓存 全文检索 celery 布署 富文本编辑器 借助富文本编辑器,管理员能够编辑出来一个包含html的页面,从而页面的显示效果,可以由管理员定义,而不用完全依赖于 ...

  5. Django使用Celery进行异步任务

    Celery Celery是一个功能完备即插即用的异步任务队列系统.它适用于异步处理问题,当发送邮件.或者文件上传, 图像处理等等一些比较耗时的操作,我们可将其异步执行,这样用户不需要等待很久,提高用 ...

  6. python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API

    python  Django教程  之 模型(数据库).自定义Field.数据表更改.QuerySet API 一.Django 模型(数据库) Django 模型是与数据库相关的,与数据库相关的代码 ...

  7. python Django教程 之 安装、基本命令、视图与网站

    python  Django教程  之 安装.基本命令.视图与网站 一.简介 Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,通过减少重复的代码,Django 使你能够专注于 w ...

  8. Django 使用celery任务队列的配置

    celery 情景:用户发起request,并等待response返回.在本些views中,可能需要执行一段耗时的程序,那么用户就会等待很长时间,造成不好的用户体验,比如发送邮件.手机验证码等. 使用 ...

  9. Django中Celery http请求异步处理(四)

    Django中Celery http请求异步处理 本章延续celery之前的系列 1.settings配置 2.编写task jib_update_task任务为更新salt jid数据 3.url设 ...

随机推荐

  1. unity中UI坐标转3d世界坐标

    方法: public static Vector3 UIScreenToWorldPoint(Vector3 uiPostion) { uiPostion = UICamera.mainCamera. ...

  2. Python - random 库的详细使用

    前言 为啥突然写这个?因为用到就写呗,感觉对生成数据很有用,之前都是百度别人的,今天来对着官方文档写,超级标准! 这边只讲常用的,看了下文档还有什么数学方法,太高级好像用不上 返回整数 random. ...

  3. 程序员与年龄:四十岁普通开发、三十五岁首席架构、三十岁基层Leader

    最近,有一个词儿特别热门--躺平.有没有人跟你说过:"躺平说起来容易,做起来更容易." 和躺平相对的是另外一个词--内卷,群聊的时候,已经很多次看过草卷起来了.jpg表情包.某些节 ...

  4. VBScript学习第一天

    编码工具:VbsEdit 1.MsgBox() 毫无例外,第一个要学的就是"Hello, World!" 直接输入: MsgBox ("Hello, World!&quo ...

  5. 3D车道线检测:Gen-LaneNet

    3D车道线检测:Gen-LaneNet Gen-LaneNet: A Generalized and Scalable Approach for 3D Lane Detection 论文链接:http ...

  6. RCNN系列、Fast-RCNN、Faster-RCNN、R-FCN检测模型对比

    RCNN系列.Fast-RCNN.Faster-RCNN.R-FCN检测模型对比 一.RCNN 问题一:速度 经典的目标检测算法使用滑动窗法依次判断所有可能的区域.本文则预先提取一系列较可能是物体的候 ...

  7. RGBD动作识别的多视图层融合模型

    摘要 基于视觉的动作识别在实践中遇到了不同的挑战,包括从任何角度识别主题,实时处理数据以及在现实环境中提供隐私.甚至识别基于配置文件的人类动作(基于视觉的动作识别的一个子集),在计算机视觉中也是一个巨 ...

  8. 【NX二次开发】开发好几年,还只会用ufusr?其他用户出口函数介绍

    用户出口(User Exit)是NX Open 中的一个重要概念.NX在运行过程中某些特定的位置存在规定的出口,当进程执行到这些出口时,NX会自动检查用户是否在此处已定义了指向内部程序位置的环境变量: ...

  9. Spring Boot WebFlux-02——WebFlux Web CRUD 实践

    第02课:WebFlux Web CRUD 实践 上一篇基于功能性端点去创建一个简单服务,实现了 Hello.这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD We ...

  10. Git 高级用法,喜欢就拿去用

    如果你觉得 git 很迷惑人,那么这份小抄正是为你准备的! 请注意我有意跳过了 git commit.git pull/push 之类的基本命令,这份小抄的主题是 git 的一些「高级」用法. 导航 ...