一、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. Arduino+AS608指纹锁避坑记

    Arduino+AS608指纹锁避坑记 .title { text-align: center; margin-bottom: 0.2em } .subtitle { text-align: cent ...

  2. [leetcode] 212. 单词搜索 II(Java)

    212. 单词搜索 II 这leetcode的评判机绝对有问题!!同样的代码提交,有时却超时!害得我至少浪费两个小时来寻找更优的答案= =,其实第一次写完的代码就可以过了,靠!!!第207位做出来的 ...

  3. TPS和响应时间之间是什么关系

    在这个图中,定义了三条曲线.三个区域.两个点以及三个状态描述. 三条曲线:吞吐量的曲线(紫色).使用率 / 用户数曲线(绿色).响应时间曲线(深蓝色).三个区域:轻负载区(Light Load).重负 ...

  4. 在Go语言项目中使用Zap日志库

    在Go语言项目中使用Zap日志库 本文先介绍了Go语言原生的日志库的使用,然后详细介绍了非常流行的Uber开源的zap日志库,同时介绍了如何搭配Lumberjack实现日志的切割和归档. 在Go语言项 ...

  5. 嵌入式Linux设备驱动程序:编写内核设备驱动程序

    嵌入式Linux设备驱动程序:编写内核设备驱动程序 Embedded Linux device drivers: Writing a kernel device driver 编写内核设备驱动程序 最 ...

  6. Hadoop 数据迁移用法详解

    数据迁移使用场景 冷热集群数据分类存储,详见上述描述. 集群数据整体搬迁.当公司的业务迅速的发展,导致当前的服务器数量资源出现临时紧张的时候,为了更高效的利用资源,会将原A机房数据整体迁移到B机房的, ...

  7. springcloud中 getway中的断言配置: Predicate 9中配置过程, getway的 filters实现限流功能:

    https://www.cnblogs.com/grasp/p/11506426.html 这里引用别人的,,且试验过 ,没问题 server: port: 9527 spring: applicat ...

  8. 2、java基础语法(上):变量与运算符

    关键字与保留字 关键字 定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词) 特点:关键字中所有字母都为小写 官方地址:https://docs.oracle.com/javase/tut ...

  9. centos 7 增加一块硬盘的步骤

    1) 增加一块硬盘 1G [到设置中添加一块硬盘即可] 2) 重启一下服务器 lsblk -f 查看硬盘 3) 给 sdb 硬盘分区 fdisk /dev/sdb n,p,enter,enter,w ...

  10. 孟老板 ListAdapter封装, 告别Adapter代码 (三)

    BaseAdapter系列 ListAdapter封装, 告别Adapter代码 (一) ListAdapter封装, 告别Adapter代码 (二) ListAdapter封装, 告别Adapter ...