如何使用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

相关文章

Java使用Mail构建邮件功能的完整指南

《Java使用Mail构建邮件功能的完整指南》JavaMailAPI是一个功能强大的工具,它可以帮助开发者轻松实现邮件的发送与接收功能,本文将介绍如何使用JavaMail发送和接收邮件,希望对大家有所... 目录1、简述2、主要特点3、发送样例3.1 发送纯文本邮件3.2 发送 html 邮件3.3 发送带

Nginx如何进行流量按比例转发

《Nginx如何进行流量按比例转发》Nginx可以借助split_clients指令或通过weight参数以及Lua脚本实现流量按比例转发,下面小编就为大家介绍一下两种方式具体的操作步骤吧... 目录方式一:借助split_clients指令1. 配置split_clients2. 配置后端服务器组3. 配

使用DeepSeek搭建个人知识库(在笔记本电脑上)

《使用DeepSeek搭建个人知识库(在笔记本电脑上)》本文介绍了如何在笔记本电脑上使用DeepSeek和开源工具搭建个人知识库,通过安装DeepSeek和RAGFlow,并使用CherryStudi... 目录部署环境软件清单安装DeepSeek安装Cherry Studio安装RAGFlow设置知识库总

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP

Spring-AOP-ProceedingJoinPoint的使用详解

《Spring-AOP-ProceedingJoinPoint的使用详解》:本文主要介绍Spring-AOP-ProceedingJoinPoint的使用方式,具有很好的参考价值,希望对大家有所帮... 目录ProceedingJoinPoijsnt简介获取环绕通知方法的相关信息1.proceed()2.g

Maven pom.xml文件中build,plugin标签的使用小结

《Mavenpom.xml文件中build,plugin标签的使用小结》本文主要介绍了Mavenpom.xml文件中build,plugin标签的使用小结,文中通过示例代码介绍的非常详细,对大家的学... 目录<build> 标签Plugins插件<build> 标签<build> 标签是 pom.XML

JAVA虚拟机中 -D, -X, -XX ,-server参数使用

《JAVA虚拟机中-D,-X,-XX,-server参数使用》本文主要介绍了JAVA虚拟机中-D,-X,-XX,-server参数使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录一、-D参数二、-X参数三、-XX参数总结:在Java开发过程中,对Java虚拟机(JVM)的启动参数进

Java中使用注解校验手机号格式的详细指南

《Java中使用注解校验手机号格式的详细指南》在现代的Web应用开发中,数据校验是一个非常重要的环节,本文将详细介绍如何在Java中使用注解对手机号格式进行校验,感兴趣的小伙伴可以了解下... 目录1. 引言2. 数据校验的重要性3. Java中的数据校验框架4. 使用注解校验手机号格式4.1 @NotBl

Python使用DeepSeek进行联网搜索功能详解

《Python使用DeepSeek进行联网搜索功能详解》Python作为一种非常流行的编程语言,结合DeepSeek这一高性能的深度学习工具包,可以方便地处理各种深度学习任务,本文将介绍一下如何使用P... 目录一、环境准备与依赖安装二、DeepSeek简介三、联网搜索与数据集准备四、实践示例:图像分类1.

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi