首页 > 其他分享 >使用celery进行异步处理和定时任务(django)

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

时间:2024-07-28 21:58:10浏览次数:7  
标签:异步 tasks -- app django celery 任务 main

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

标签:异步,tasks,--,app,django,celery,任务,main
From: https://blog.csdn.net/chenchun0458/article/details/140738025

相关文章

  • 【Python】Django学习1
     按黑马程序员的美多商场作方向:https://www.bilibili.com/video/BV1nf4y1k7G3一、应用创建、注册处理、配置Pycharm 创建Django项目: 自应用注册处理: 二、应用数据初始化第一步:创建元数据初始化py脚本pythonmanage.pymakemigrations初始化的脚本会放在......
  • Django Web开发:构建强大RBAC权限管理系统的实战指南
    文章目录前言一、rbac基于角色的权限管理1.acl基于用户的权限管理2.rbac基于角色的权限管理二、应用示例1.配置角色资源a.分析表b.核心逻辑c.使用transfer在前端实现资源配置d.页面效果2.登录时获取对应权限a.员工登录b.中间件c.前端请求d.效果图3.前端-路由守卫......
  • django学习入门系列之第五点《javascript的条件语句和函数》
    文章目录5.6条件语句5.7函数往期回顾5.6条件语句if(){}elseif(){}5.7函数#python中函数定义的格式deffunc{函数的内容}#使用函数func()//javascript函数中的内容functionfunc(){函数的内容}//使用函数func()往......
  • 如何在 Django 中调试失败的测试?
    如何调试我的测试?例如,我通过POST创建一个条目并期望它验证并返回特定页面。它可以在浏览器和shell中工作,但测试是唯一失败的事情(讽刺的是!)。我想打印对控制台的响应或其他东西,这样我就可以读取错误或你有什么。但我只能看到我print中的东西,例如视图。不确定是否......
  • Django提示mysql版本过低:django.db.utils.NotSupportedError: MySQL 8 or later is re
    这个提示只是Django的版本检测提示,把它注释掉就好了。全局搜索函数:check_database_version_supported() 文件路径是:django_project\dj01\venv\Lib\site-packages\django\db\backends\base\base.py找到第二个,就是就是使用的那个,把它注释了: definit_connection_sta......
  • 使用 DigitalOcean Spaces 在 Django 应用程序中初始化 boto3 会话时出错
    当我尝试将Django应用程序配置为使用DigitalOceanSpaces处理静态文件和媒体文件时,我遇到了问题。这是我的settings.py文件的相关部分:importboto3frombotocore.exceptionsimportNoCredentialsError,PartialCredentialsErrorfrombotocore.clientimportCo......
  • 在 Google Colab 上运行 Django:错误 403 Forbidden
    我正在尝试对我的Python程序的Colab进行一些测试并使用Django。我按照此链接中的说明进行操作。我确保在settings.py中设置了此设置ALLOWED_HOSTS=['*']运行此命令以获取链接https://randomstrings.colab.googleusercontent.com/fromgo......
  • Django 测试设置错误:MySQL 后端的 django_content_type 表问题
    我在使用MySQL后端设置Django测试时遇到问题。该错误发生在测试数据库设置阶段,特别与django_content_type表相关。详细信息如下:环境:Django版本:5.0.7MySQL版本:8.0.37操作系统:Ubuntu20.04Python版本:3.11.12......
  • Django Haystack 多值字符串分面——未知字段tags_exact
    我网站上的内容用可变长度的字符串标记,我想对这些标记进行分面搜索。例如,一个故事可能有标签“内战”、“格兰特将军”和“葛底斯堡之战”。我希望能够对精确的非标记化字符串进行分面搜索。在我的search_index.py中,我定义了:tags=MultiValueField(faceted=True,in......
  • Windows下使用Apache和mod_wsgi部署django项目
    一、安装Python确定好所需要的python版本。二、安装Apacheapache下载地址:http://httpd.apache.org/docs/current/platform/windows.html#down下载完成后做如下操作将apache解压后直接复制到你想安装的路径下1、更改httpd.conf文件,找到如下代码并更改路径DefineSRVROOT"E:......