广告位联系
返回顶部
分享到

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

python 来源:互联网 作者:佚名 发布时间:2025-01-11 22:02:11 人浏览
摘要

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

一、celery的作用

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

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

二、安装celery

命令:

1

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

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

'''

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

1

2

# 设置消息队列,用redis实现

broker_url = 'redis://127.0.0.1:6379/15'

  • celery_beat_schedule.py

1

2

3

4

5

6

7

8

9

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分钟分钟

    },

}


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 使用python实现无需验证码免登录12306抢票功能

    使用python实现无需验证码免登录12306抢票功能
    就在刚刚我抢的票:2025年1月8日 上午9.00多 抢到了哈哈哈哈 其实还是有用的我是在 8:59:56运行程序的 上一篇帖子,我们已经了解了如何用
  • python字典根据key排序的实现
    在 Python 中,字典是无序的,不支持直接按照键排序。但是可以通过以下方法实现字典按照键排序: 方法一:使用 sorted() 函数和字典的 it
  • 在Ubuntu上部署Flask应用的流程步骤
    一、部署准备 在开始之前,请确保你具备以下条件: 一台运行 Ubuntu(如 Ubuntu 20.04 或 22.04)的服务器,具有 SSH 访问权限。 Python 应用程序
  • 怎么使用celery进行异步处理和定时任务(django)

    怎么使用celery进行异步处理和定时任务(django)
    一、celery的作用 celery 是一个简单、灵活且可靠的分布式系统,用于处理大量消息,同时为操作提供一致的接口。它专注于实时操作,但支持
  • 使用Python绘制蛇年春节祝福艺术图

    使用Python绘制蛇年春节祝福艺术图
    1. 绘图的基本概念 在 Python 中,我们将使用以下方法和模块完成绘制任务: matplotlib.patches 模块: 提供了绘制基本几何图形的功能,例如圆
  • Python如何实现HTTP echo服务器

    Python如何实现HTTP echo服务器
    一个用来做测试的简单的 HTTP echo 服务器。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 from ht
  • python中_init_.py的作用

    python中_init_.py的作用
    1. __init__.py 是个啥? __init__.py,顾名思义,这个文件名就透露出它是用来初始化的。在Python里,它主要用于标识一个目录是一个包(Package)
  • Python调用JavaScript代码的几种方法
    1. 使用PyExecJS执行JavaScript代码 PyExecJS是一个流行的Python库,它可以用来在Python中运行JavaScript代码。通过这个库,Python代码可以调用JS函数,
  • python中json.dumps和json.dump区别
    1、json.dumps和json.dump的区别 json.dumps()是将 Python 对象序列化为 JSON 格式的字符串。如果你想将 JSON 数据写入文件,可以将json.dumps()生成的字符
  • 使用Python和LabelMe实现图片验证码的自动标注功能

    使用Python和LabelMe实现图片验证码的自动标注功能
    使用 Python 和 LabelMe 实现图片验证码的自动标注 在处理图片验证码时,手动标注是一项耗时且枯燥的工作。本文将介绍如何使用 Python 和 L
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计