首页 > 其他分享 >django-celery定时任务(beat)

django-celery定时任务(beat)

时间:2023-09-05 14:14:15浏览次数:41  
标签:CELERY task beat app django celery mycelery import

前言

  Celery 可以异步执行,也可以通过定时任务触发

Django 中使用 Celery

  要在 Django 项目中使用 Celery,您必须首先定义 Celery 库的一个实例(称为“应用程序”)

  如果你有一个现代的 Django 项目布局,比如:

  

   创建一个celery模块,来定义celery实例

  

import os

from celery import Celery

# Set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mycelery.settings')

app = Celery('mycelery')

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')

# Load task modules from all registered Django apps.
app.autodiscover_tasks()

  mycelery是自己django项目中的app名称

  然后你需要在你的mycelery/mycelery/__init__.py 模块中导入这个应用程序。这确保在 Django 启动时加载应用程序,以便 @shared_task 装饰器(稍后提到)将使用它:

from .celery import app as celery_app

__all__ = ('celery_app',)

tasks任务

 在app下新建tasks.py,必须要是tasks.py文件名称,django会自动查找到app下的该文件

from __future__ import absolute_import
from celery import shared_task


@shared_task
def add(x, y):
    print("task----------111111----------")
    return x + y


@shared_task
def mul(x, y):
    print("task----------22222----------")
    return x * y

添加setting配置

INSTALLED_APPS = [
    ***
    'mycelery',
]
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT=['json']
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERY_ENABLE_UTC = True

#  celery 配置连接redis
CELERY_BROKER_URL = 'redis://150.158.47.37:6379'
CELERY_RESULT_BACKEND = 'redis://150.158.47.37:6379'


# 配置定时任务
from celery.schedules import crontab
from datetime import timedelta

CELERY_BEAT_SCHEDULE = {
    'add': {
        'task': 'mycelery.tasks.add',  # 任务
        'schedule': timedelta(seconds=5),  # 每5秒执行add函数
        'args': (11, 12)  # 运行参数
    },
    'mul': {
        'task': 'mycelery.tasks.mul',  # 任务
        'schedule': timedelta(seconds=10),  # 每10秒执行mul函数
        'args': (11, 2)  # 运行参数
    }
}

  task:对应的路径地址是app下tasks的路径和对应的函数名称

启动worker 和beat服务

  启动worker,执行任务

  celery -A mycelery worker -l info -P eventlet

  

   启动beat 定时任务监听

  celery -A mycelery(django 项目名称) beat -l info

  

 

crontab 周期任务

前面是设置每多少秒执行任务,这个只是测试下功能,任务很简单,我们一般用crontab 实现周期性任务,比如每周1-5早上执行一遍任务,用crontab 可以轻松实现

# crontab任务
# 每周一8:30调用task.add
from celery.schedules import crontab

CELERYBEAT_SCHEDULE = {
    # Executes every Monday morning at 8:30 A.M
    'add': {
        'task': 'yoyo(django app名称).tasks.add',  # 任务
        'schedule': crontab(hour=8, minute=30, day_of_week=1),
        'args': (11, 12)  # 运行参数
    }
}

  

标签:CELERY,task,beat,app,django,celery,mycelery,import
From: https://www.cnblogs.com/7dao/p/17679397.html

相关文章

  • 生产环境部署Django项目
    生产环境部署Django项目1、 部署架构IP地址安装服务  172.16.1.251nginxuwsgi(sock方式)dockermysql5.7redis5 Nginx前端Web服务,接收到动态请求通过uwsgi模块将请求转发给uwsgi服务器,uwsgi服务器通过django处理完后返回给Nginx,Nginx返回用户浏览器展示。 既然uwsgi是一个......
  • Django中创建项目步骤
    step1:创建一个文件夹projectstep2:进入cmd,进入该文件夹cdE:/pythoncode/projectstep3:创建Django项目,该项目名称为“project_name”django-adminstartprojectproject_name创建成功......
  • 软件测试|Django 入门:构建Python Web应用的全面指南
    引言Django是一个强大的PythonWeb框架,它以快速开发和高度可扩展性而闻名。本文将带您深入了解Django的基本概念和核心功能,帮助您从零开始构建一个简单的Web应用。什么是Django?Django是一个基于MVC(模型-视图-控制器)设计模式的Web框架,旨在简化Web应用程序的开发过程。它由Django软......
  • celery简介与安装
    前言Celery是一个简单,灵活,可靠的分布式系统,用于处理大量消息,同时为操作提供维护此类系统所需的工具。它是一个任务队列,专注于实时处理,同时还支持任务调度。可以使用的场景如下:异步发邮件,这个时候只需要提交任务给celery就可以了.之后由worker进行发邮件的操作.跑批接口......
  • VSCode 配置python Django
    好吃vs占用的内存很少很轻量但是需要自己人肉配置核心两个点启动项目文件launch.json项目设置包括resthttpclientdjango.vscdoe新建launch.json{"version":"0.2.0","configurations":[{"name":"Python:Django&q......
  • celery笔记
    celery介绍1.它是什么?分布式的异步任务框架直译为:芹菜[/ˈseləri]2.可以做什么?异步任务。(异步执行函数)延迟任务。(延迟5s任务(函数))定时任务。(例如:每天23点触发测试)[如果单纯执行定时任务,没必要用celery]3.平台问题celeryisaprojectwithminimal......
  • Django优化模版拆分css文件
    Django优化模版拆分css文件可以发现前面写项目将css放在html一个文件中,虽然简单省事但是带来的问题就是文件过于冗长不方便查看和修改。这里做个分离优化提供两种方式方式一:html和css存放同一目录 将原因html中</style>内容移动到home.css文件中,然后再html移动空白位置,替换......
  • celery 异步任务
    最近在搭建python测开平台新get的一个知识点,celery的使用,在此记录一下1.安装环境pipinstallcelerpipinstallcelery2.认识一下celery(1)简介:Celery是使用python编写的分布式任务调度框架,在我们日常web应用中,请求一个后端接口就是等待该接口的业务完成后再返回,如果接口......
  • Django系统报错总结 1
    Django系统报错总结1 本章节,继续总结前面商品系统编写中遇到的报错问题TypeError:Product()gotunexpectedkeywordarguments:'update_time','seller'因为在Product类中没有定义参数update_time和seller。要解决这个问题,你需要确保在Product类中添加这些参数的定义。......
  • django+drf开发一些个人的标准化
    最近在改造一下个人的开发风格。特分享一下。子应用我一般放在apps中,每个不同模块的子应用起不同的名字。startapp后自己移动一下,记得修改一下Appconfig中的name即可。子应用中创建services.py或者如有需要可以创建services模块再细分。所有业务放到services中编写。views一律......