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

 更新时间:2025年01月10日 15:57:48   作者:_BooI  
文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中处理后台任务,如发送邮件、视频转码等,而不阻塞Web请求,文章还提到了启动Celery worker和beat的命令以及任务和定时任务的执行效果

一、celery的作用

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

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

二、安装celery

命令:

pip install celery -i https://pypi.tuna.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方法

具体实现如下:

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

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

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

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

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

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

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

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

四、使用celery定期执行任务

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

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

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

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

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

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

五、启动命令

  • 命令: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

六、 效果展示

任务的执行

定期任务的执行

七、具体文件目录

  • main.py
'''
1、生产者
2、消费者
使用命令(linux):celery -A celery实例脚本文件 worker -l info  启动进程,消费者拿任务, 终端执行
windows命令:celery -A celery_tasks.main worker --concurrency=4 --loglevel=INFO -P threads
3、消息队列
'''
 
import os
from celery import Celery
 
# 为celery设置环境
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mall_test.settings")
 
# 创建celery实例
app = Celery('celery_tasks')
 
# 设置broker,消息队列, 从配置信息中加载
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分钟分钟
    },
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python super()函数使用及多重继承

    Python super()函数使用及多重继承

    这篇文章主要介绍了Python super()函数使用及多重继承,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • python正则表达式及使用正则表达式的例子

    python正则表达式及使用正则表达式的例子

    正则表达是用来匹配字符串,这篇文章给大家介绍了python正则表达式及正则表达式的例子,文章给大家提到了正则表达式语法规则,感兴趣的朋友一起看看吧
    2018-01-01
  • Django 后端数据传给前端的实现示例

    Django 后端数据传给前端的实现示例

    本文主要介绍了Django 后端数据传给前端的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • pytorch Dataset,DataLoader产生自定义的训练数据案例

    pytorch Dataset,DataLoader产生自定义的训练数据案例

    这篇文章主要介绍了pytorch Dataset, DataLoader产生自定义的训练数据案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 举例讲解Python常用模块

    举例讲解Python常用模块

    今天小编就为大家分享一篇关于举例讲解Python常用模块,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Python使用pypandoc将markdown文件和LaTex公式转为word

    Python使用pypandoc将markdown文件和LaTex公式转为word

    pypandoc 是一个用于 pandoc 的轻量级 Python 包装器,支持多种格式的文档转换,下面我们来看看如何使用pypandoc将markdown文件和LaTex公式转为word吧
    2025-04-04
  • python进度条tqdm使用方式

    python进度条tqdm使用方式

    这篇文章主要介绍了python进度条tqdm使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • python通过paramiko复制远程文件及文件目录到本地

    python通过paramiko复制远程文件及文件目录到本地

    这篇文章主要为大家详细介绍了python通过paramiko复制远程文件及文件目录到本地,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • 使用Python的defaultdict处理字典中缺失键的常见方法

    使用Python的defaultdict处理字典中缺失键的常见方法

    在Python编程中,字典是一种非常常用的数据结构,但在处理字典时,经常会遇到访问或修改不存在的键的情况,这会导致KeyError异常,本文介绍了如何使用Python标准库中的collections.defaultdict来优雅地处理字典中的缺失键问题,需要的朋友可以参考下
    2025-08-08
  • 利用python 制作词云特效详情

    利用python 制作词云特效详情

    这篇文章主要介绍了利用python 制作词云特效详情,​词云​也是数据可视化的一种形,根据关键词的出现频率而生成的一幅图像,人们只要扫一眼就能够明白其文章主旨,下文详细介绍,需要的朋友可以参考一下
    2022-04-04

最新评论