Django高级扩展之系统后台使用celery

news2024/11/17 5:32:34

如果我们在系统后台想某日某时执行某个任务,或者每隔一段时间执行某个任务,可以使用celery来完成。

目录

安装

安装celery

安装django_celery_beat

celery配置

注册应用

celery配置

修改__init__.py

表迁移

执行迁移

控制台运行截图

新增数据表

安装django-celery-results

执行命令

注册应用

创建表

如果出现错误

创建后台管理员账号

创建任务文件

添加任务

周期任务

启动定时任务 

总结


安装

安装celery

pip install celery

安装django_celery_beat

系统后台使用定时任务,需要安装额外包:

pip install django_celery_beat

celery配置

注册应用

首先在settings.py中注册应用:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
    'django_celery_beat'
]

celery配置

在工程目录下创建celery.py文件

内容如下:

from celery import Celery
from django.conf import settings
import os


# 为celery设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')

# 创建应用
app = Celery('project')

# 配置应用
app.conf.update(
    # 配置broker, 这里我们用redis作为broker
    BROKER_URL='redis://127.0.0.1:6379/1',

    # 使用项目数据库存储任务执行结果
    CELERY_RESULT_BACKEND='django-db',

    # 配置定时器模块,定时器信息存储在数据库中
    CELERYBEAT_SCHEDULER='django_celery_beat.schedulers.DatabaseScheduler',

)

# 设置app自动加载任务
# 从已经安装的app中查找任务
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

修改__init__.py

修改工程目录下__init__.py文件,增加以下内容:

from .celery import app as celery_app

__all__ = ['celery_app']

表迁移

由于定时器信息存储在数据库中,需要生成对应表迁移文件,

然后执行迁移操作,创建diango_celery_beat对应表:

执行迁移

python manage.py migrate django_celery_beat

控制台运行截图

 

 

新增数据表

安装django-celery-results

celery任务的记录要保存到数据库,就需要安装django-celery-results。

执行命令

pip install -U django-celery-results

注册应用

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
    'django_celery_beat',
    'django_celery_results',
]

 

创建表

python manage.py migrate

数据库增加表

 

如果出现错误

(1071, 'Specified key was too long; max key length is 1000 bytes')

 

解决方法

settings.py中添加

DJANGO_CELERY_RESULTS_TASK_ID_MAX_LENGTH = 191

 

创建后台管理员账号

如果没有创建管理员账号,执行以下命令:

python manage.py createsuperuser

 

创建任务文件

在子应用目录创建tasks.py文件,设置执行方法:

from celery import shared_task
import time


# 用于定时执行的任务
@shared_task
def schedule_execute():
    print("我每隔5秒钟时间执行一次....")

添加任务

登录管理后台Admin:

我们可登录网站后台Admin去添加对应任务。

因为配置了语言,所以显示为中文。周期性任务、定时任务、日程事件、计划任务、间隔都可进行定时任务设置。

周期任务

 

 

启动定时任务 

celery -A project beat -l info

任务每隔5秒就会执行一次,如果配置了存储,

那么每次任务执行的结果也会被保存到对应的数据库中。

总结

主要步骤为:安装三方类库,后台添加定时任务,命令行启动celery队列。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/682460.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

gunicorn不停服重启更新服务

简介 Gunicorn是基于unix系统,被广泛应用的高性能的Python WSGI HTTP Server。用来解析HTTP请求的网关服务。 它通常是在进行反向代理(如nginx),或者进行负载均衡(如 AWS ELB)和一个web 应用(比…

AI + 算力 = “最强龙头”?

随着人工智能技术的飞速发展,“AI算力”的结合应用已成为科技行业的热点话题,甚至诞生出“AI算力最强龙头“的网络热门等式。该组合不仅可以提高计算效率,还可以为各行各业带来更强大的数据处理和分析能力,从而推动创新和增长。 …

Java项目-SpringBoot+Vue 的学生就业管理信息系统

💕💕作者:程序员徐师兄 个人简介:7 年大厂程序员经历,擅长Java、微信小程序、Python、Android等,大家有这一块的问题可以一起交流! 各类成品java毕设 。javaweb,ssh,ssm&…

小航助学2023年6月GESP_C++三级试卷(含题库答题软件账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSDN博客 单选题2.0分 删除编辑附件图文 答案:D 第1题高级语言编写的程序需要经过以下( )操作,可以生成在…

geo-tool 解析百度经纬出错 {‘status‘: 240, ‘message‘: ‘APP 服务被禁用‘}

geo-tool 解析百度经纬出错 {status: 240, message: APP 服务被禁用} 引子一、查错二、排错三、测试通过参考 作者:高玉涵 时间:2023.6.25 环境:Windows 10 专业版 22H2,Python 3.10.4 第三方包:geo-tool 1.1.2 引…

【模拟CMOS集成电路】HSPICE入门仿真分析实例

【模拟CMOS集成电路】HSPICE入门仿真分析实例 一、采用HSPICE的MOS器件仿真二、INV倒相器HSPICE仿真附录程序源码(一)程序源码(二) 一、采用HSPICE的MOS器件仿真 一、采用HSPICE的MOS器件仿真, 并回答以下问题。   1&#xff0…

Visual Studio 2019使用详解

VS2019(Visual Studio 2019)是由微软开发的集成开发环境(IDE),用于开发各种应用程序,包括桌面应用程序、Web应用程序、移动应用程序等。 对工具的熟悉程度有助于提升开发效率,磨刀不误砍柴功&am…

solr快速上手:整合spring-data-solr实现客户端操作(十)

0. 引言 前一章介绍了官方的solr客户端SolrJ,但是solrJ的使用相对来说并不方便,仍然需要做一些负责的客户端操作以及语句的书写,有没有更加方便的ORM框架呢,这就提到了spring-data-solr了 1. 简介 首先如果你还不知道spring-da…

面试题:深拷贝和浅拷贝(+内存图)

深拷贝和浅拷贝主要是针对对象的属性是对象(引用类型) 一、基本类型和引用类型的区别 1)、基本类型:就是值类型,即在变量所对应的内存区域存储的是值。 2)、引用类型:就是地址类型。 何为地…

Kubeadm 部署k8s实现并且演示滚动不停服务更新

1. 环境准备 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统 CentOS7.x-86_x64;硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多;集群中…

【Activiti】原理

一、核心类 RepositoryService:部署管理流程资源,如bpmn文件、附件等等;RuntimeService:操作运行时的流程;TaskService:流程中任务的信息;HistoryService:流程的历史信息&#xff1…

ZYNQ——按键和LED关联实验

ZYNQ 7020黑金开发板的PL端有四个LED,如下图所示。 PL端也有四个KEY,如下图所示。 本文将把这四个按键和四个LED一一对应起来,在按键按下或松开时,对应的LED产生亮或灭的信号。 在原理图中找到PL端的LED和KEY如下图所示。 通过…

成为python爬虫工程师需要哪些知识?

爬虫(Web crawler)是一种自动化程序,用于从互联网上抓取、解析和提取网页数据。它模拟浏览器行为,通过发送HTTP请求获取网页内容,并通过解析网页源代码或DOM结构,提取所需的信息。以python爬虫为例&#xf…

优思学院|作业标准和标准化作业有何区别?傻傻搞不清?

作业标准和标准作业是两个在生产和制造环境中具有重要意义的概念。尽管它们看似相似,但实际上它们在定义、目的和实施方法上存在显著差异。本文将探讨作业标准和标准作业的区别,以及它们在工作场所中的作用和重要性。 1. 引言 在制造领域中&#xff0c…

JDBC小记——SQL注入及预编译操作对象、批处理

目录 SQL注入 预编译操作对象 自定义JDBC工具类 1.创建配置文件 2.配置 3.在工具类中使用配置文件 批处理 注意事项 SQL注入 SQL注入是黑客对数据库进行攻击的常用手段之一,他们拼接一些恶意的sql语句,来获取他们想要的数据。 例: s…

Bpmn.js流程建模结合业务整合工作流(一)

bmpn.js是什么? 先上图 初步认识bpmn.js 相关文档直接上链接 全网最详bpmn.js教材-基础篇 - 掘金bpmn.js是一个BPMN2.0渲染工具包和web建模器, 使得画流程图的功能在前端来完成. 因为公司业务的需要因而要在项目中使用到bpmn.js,但是由于bpmn.js的开发者是国外友人, 因此国…

【2023年中总结】是的,我从一家世界前百强企业毕业了,进入了一家只有20人的小企业。。。

我的2023-上 🕐 一、引言🕜 二、新年🕙 三、措手不及🕥 四、抉择🕚 五、适应🎉测试驱动开发🎉角色的转变🎉工作环境和生活环境的转变🎉工作态度 🕦 六、挑战&…

【裸机开发】定时器中断(EPIT)

EPIT 是周期性中断定时器,会定期调用指定的中断服务函数,其实可以看做是一种IRQ的外设中断,对应的中断ID是88(5632)或者 89(5732)。 目录 一、定时器计数流程 二、寄存器解析 1、EPIT1_CR 2…

骨传导耳机、运动耳机推荐:南卡OE开放式TWS耳机值得买吗?南卡OE测评

目前,如果说到骨传导耳机、蓝牙耳机想必大家都很熟悉,那你了解TWS耳机么? 如果说iPhone“重新定义”了智能手机,那么AirPods就重新定义了耳机——它“断”了耳机与手机/播放器间的连线,还将左右耳彼此间的连线彻底摒弃…

SimpleDateFormat显示24小时和12小时时间格式

public static void main(String[] args) throws Exception {MainTest1 mainTest1 new MainTest1();mainTest1.dateFormat();} yyyy-MM-dd HH:mm:ss格式显示的时间为:2017-06-12 18:01:06 yyyy-MM-dd hh:mm:ss格式显示的时间为:2017-06-12 06:01:06