如何使用celery进行异步处理和定时任务(django)

2025-01-11 04:50

本文主要是介绍如何使用celery进行异步处理和定时任务(django),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中...

一、celery的作用

celery 是一个简单、灵活且可靠的分布式系统,用于处理大量消息,同时为操作提供一致的接口。它专注于实时操作,但支持任务调度。

Celery 主要用于异步任务处理,特别是在Web应用环境中,用于执行后台任务,如发送电子邮件、处理图片、视频转码、运行复杂的计算等,而不必阻塞Web请求/响应周期。

二、安装celery

命令:

pip install celery -i https://pypi.tunwww.chinasem.cna.tsinghua.edu.cn/simple

三、使用celery 异步执行任务

官方文档:First steps with Django — Celery 5.4.0 documentation (celeryq.dev)

1、配置

  • 1)给celery设置环境,为django项目的环境
  • 2)创建celery实例
  • 3)设置broker,也就是我们存放任务的队列,这里从配置文件中加载broker
  • 4)设置自动检测任务,autodiscover_tasks方法

具体实现如下:

如何使用celery进行异步处理和定时任务(django)

broker配置文件如下,这里用Redis做队列来存任务:

如何使用celery进行异步处理和定时任务(django)

2、创建好celery实例和配置broker之后,开始创建任务

比如我要创建一个发送邮件的任务:

  • 1)创建文件夹,创建tasks.py文件

如何使用celery进行异步处理和定时任务(django)

  • 2)在tasks.py文件中编写任务(函数), 一定要用task装饰器修饰起来

如何使用celery进行异步处理和定时任务(django)

  • 3)在app.autodiscover_tasks([ ])中添加你的任务

参数是列表,列表中的元素是task的路径(就是要执行的任务所在的路径)

如何使用celery进行异步处理和定时任务(django)

  • 4)在你想要异步执行该函数的地方导入,用delay方法将任务推到队列中

如何使用celery进行异步处理和定时任务(django)

四、使用celery定期执行任务

官方文档:Periodic Tasks — Celery 5.4.0 documentation (celeryq.dev)

1、创建一个文件,专门用来放定时任务的配置(也可以不用)

  • task就是要执行的定时任务, 注意位置要找对,要找到对应的函数
  • schedule执行的周期

如何使用celery进行异步处理和定时任务(django)

2、用 app.conf.beat_schedule 来指定我们的定时任务

如何使用celery进行异步处理和定时任务(django)

3、在app.autodiscover_tasks([ ])中添加你的任务

参数是列表,列表中的元素是task的路径(就是要执行的任务所在的路径)

如何使用celery进行异步处理和定时任务(django)

五、启动命令

  • 命令:Celery -A celery实例脚本文件 worker --loglevel=INFO
  • linux命令:celery -A celery_tasks.main worker --loglevel=INFO
  • Windows命令:celery -A celery_tasks.main worker --concurrency=4 --loglevel=INFO -P threads

定时任务,需要开两个终端分别执行两条命令,celery_tasks.main替换成你自己的脚本文件

  • 1、celery -A celery_tasks.main worker --concurrency=4- -loglevel=INFO -P threads
  • 2、celery -A celery_tasks.main beat --loglevel=INFO

六、 效果展示

任务的执行

如何使用celery进行异步处理和定时任务(django)

如何使用celery进行异步处理和定时任务(django)

定期任务的执行

如何使用celery进行异步处理和定时任务(django)

七、具体文件目录

如何使用celery进行异步处理和定时任务(django)

  • main.py
'''
1、生产者
2、消费者
使用命令(linuxjavascript):celery -A celery实例脚本文件 worker -http://www.chinasem.cnl info  启动进程,消费者拿任务, 终端执行
windows命令:celery -A celery_tasks.main worker --concurrency=4 --loglevel=INFO -P threads
3、消息队列
'''
 
import os
from celery import Celery
 
# 为cehttp://www.chinasem.cnlery设置环境
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mall_test.settings")
 
# 创建celery实例
app = Celery('celery_tasks')
 
# 设置brChina编程oker,消息队列, 从配置信息中加载
app.config_from_object('celery_tasks.config')
 
# 让celery自动检测指定包的任务
# 参数是列表,列表中的元素是task的路径(就是要执行的任务所在的路径)
app.autodiscover_tasks(['celery_tasks.sms', 'celery_tasks.email', 'celery_tasks.generate_static'])
 
# 定时任务
from celery_tasks.celery_beat_schedule import CELERY_BEAT_SCHEDULE
app.conf.beat_schedule = CELERY_BEAT_SCHEDULE  # 加入定时任务
  • config.py
# 设置消息队列,用redis实现
broker_url = 'redis://127.0.0.1:6379/15'
  • celery_beat_schedule.py
from celery.schedules import crontab
 
# 定时任务, 可以添加多个,启动命令
CELERY_BEAT_SCHEDULE = {
    'update-html': {
        'task': 'celery_tasks.generate_static.tasks.generate_static_index_html',  # 找到对应函数即可
        'schedule': crontab(minute='*/1'),  # 周期,这里是30分钟分钟
    },
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持China编程(www.chinasem.cn)。

这篇关于如何使用celery进行异步处理和定时任务(django)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153036

相关文章

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

Pandas透视表(Pivot Table)的具体使用

《Pandas透视表(PivotTable)的具体使用》透视表用于在数据分析和处理过程中进行数据重塑和汇总,本文就来介绍一下Pandas透视表(PivotTable)的具体使用,感兴趣的可以了解一下... 目录前言什么是透视表?使用步骤1. 引入必要的库2. 读取数据3. 创建透视表4. 查看透视表总结前言

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基