当前位置: 代码网 > it编程>前端脚本>Python > 如何使用celery进行异步处理和定时任务(django)

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

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

一、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分钟分钟
    },
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com