首页 > 其他分享 >Django + celery + django-celery-result + django-celery-beat 实现定时任务

Django + celery + django-celery-result + django-celery-beat 实现定时任务

时间:2023-10-26 12:13:53浏览次数:45  
标签:CELERY beat django celery 任务 import

1.库版本
celery 5.3.4
Django 4.2.6
django-celery-beat 2.5.0
django-celery-results 2.5.1
django-timezone-field 6.0.1
eventlet 0.33.3
flower 2.0.1
redis 3.5.3
项目名称: new_project

2.settings.py 配置(时区有关系)

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True

# django-celery  配置的部分
# Broker配置,使用Redis作为消息中间件
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/0'

# BACKEND配置,可以选用redis或存放数据库
# CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0'
CELERY_RESULT_BACKEND = 'django-db'  # 存放至数据库

CELERY_CACHE_BACKEND = 'default'  # 设置缓存为默认缓存,
CELERY_TASK_TRACK_STARTED = True  # 设置任务启动追踪
CELERY_TASK_TIME_LIMIT = 30 * 60  # 设置任务运行时间限制为30分钟

# 结果序列化方案
CELERY_RESULT_SERIALIZER = 'json'

# 任务结果过期时间,秒
CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24

# 时区配置
CELERY_TIMEZONE = 'Asia/Shanghai'

# # 指定导入的任务模块,可以指定多个
CELERY_IMPORTS = (
   'new_project.tasks',
)

# django-celery-beat配置
# SCHEDULER 定时任务保存数据库
# 将任务调度器设为DatabaseScheduler
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
# 为存储结果设置过期日期,默认1天过期。如果beat开启,Celery每天会自动清除。
# 设为0,存储结果永不过期
# CELERY_RESULT_EXPIRES = xx
CELERY_TASK_RESULT_EXPIRES = 60*60*24  # 后端存储的任务超过一天时,自动删除数据库中的任务数据,单位秒
CELERY_MAX_TASKS_PER_CHILD = 1000  # 每个worker执行1000次任务后,自动重启worker,防止任务占用太多内存导致内存泄漏
DJANGO_CELERY_BEAT_TZ_AWARE = False

  3.celery.py(与settings.py同目录)

import os
from datetime import timedelta

import django
from celery import Celery

# 设置系统环境变量,安装django,必须设置,否则在启动celery时会报错
# djangoProject1.settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'new_project.settings')
django.setup()

celery_app = Celery('new_project')
celery_app.config_from_object('django.conf:settings', namespace='CELERY')
# 发现每个app下的task.py
celery_app.autodiscover_tasks()

# 手动设置定时执行任务(也可参考后面通过admin后台设置任务)
CELERY_BEAT_SCHEDULE = {
    "add-every-30s": {
        "task": "new_project.tasks.show_msg",
        'schedule': timedelta(seconds=20),
        # 'args': (3,)  # 传递参数-
    },
}

  4.配置定时任务task.py(与settings.py文件同目录)

import random
from pdf2docx import Converter
from celery import shared_task

@shared_task
def show_msg():
    print("================================")
    return 111
该任务可在admin/页面定时任务中被发现,且执行结果为return的值111,在worker日志中可以看到print的值和return的值

  

5.迁移数据库,会生成celery-result和celery-beat相关的表
6.启动Django服务:python manage.py runserver 8000
7.启动celery-worker:celery -A new_project worker -l debug -P eventlet
8.启动celery-beat: celery -A new_project beat -l info

9.定时任务:
如果第3点手动配置了任务,则任务会自动运行,若未配置可以手动配置
登录后台admin/: http://127.0.0.1:8000/admin/ 使用admin账号进行登录
登录后点击"周期性任务"后面的增加进行定时任务增加,设置相关信息,其中任务已注册的选项来源于所有app里面task.py里面的方法

 

 

10.建议开始时间选择从00:00:00开始,保存后定时任务开始执行,可以在worker日志中查看任务执行情况


遇到的问题:
1.Django从3切到4版本,无法识别django.urls库导入url
解决:把from django.conf.urls import url 修改为 from django.urls import re_path as url

2.定时任务可在admin/页面手动执行,但是定时任务在worker中未执行
解决:应该是时间问题,把任务时间调整到从00:00:00开始后,任务正常执行

标签:CELERY,beat,django,celery,任务,import
From: https://www.cnblogs.com/lytcreate/p/17789106.html

相关文章

  • Filebeat占用CPU过高问题定位与分析
    一、Filebeat简介:Filebeat是一个开源的轻量级日志收集器,用于将日志数据发送到指定的中央服务系统。主要分为三个部分。Prospector负责检测指定日志目录或文件,并对检测到的每个日志文件,filebeat启动一个收割进程(harvester),Filebeat目前支持两种Prospector类型:log和stdin,每个Pros......
  • Django admin后台管理
    django给提供了一个可视化的界面用来让你方便的对你的模型表进行数据的增删改查操作如果你先想要使用amdin后台管理操作模型表你需要先注册你的模型表告诉admin你需要操作哪些表注册模型表去你的应用下的admin.py中注册你的模型表fromdjango.contribimportadminfrom......
  • P6109 [Ynoi2009] rprmq1 题解-猫树+Segment Tree Beats
    20231025P6109[Ynoi2009]rprmq1题解-猫树+SegmentTreeBeats不愧是学长出的题。。。让我更深刻地理解了猫树。Statement传送门有一个\(n\timesn\)的矩阵\(a\),初始全是\(0\),有\(m\)次修改操作和\(q\)次查询操作,先进行所有修改操作,然后进行所有查询操作。一次修......
  • django学习
     一、准备1、下载、安装2、django-adminstartprojectmysite创建项目3、django-adminstartappblog创建应用3、修改sittings.py      3.1 INSTALLED_APPS中添加'blog'      3.2修改时区 TIME_ZONE='Asia/Shanghai'      ......
  • CF1572F Stations 题解-Segment Tree Beats
    20231025CF1572FStations题解-SegmentTreeBeats吉司机线段树好题!!!CF3400。传送门Statement有\(n\)个广播站,第\(i\)个广播站高度为\(h_i\),范围为\(w_i\)。初始\(h_i=0,w_i=i\)。广播站\(i\)能向广播站\(j\)传递消息,当且仅当\(i\lej\lew_i\),且\(h_i>\max\lim......
  • Filebeat收集Nginx日志
    4.1为什么收集Nginx日志我们需要获取用户的信息,比如:来源的IP是哪个地域,网站的PV、UV、状态码、访问时间等等;所以需要收集Nginx日志;4.2Nginx日志收集架构图4.3Nginx日志收集实践4.3.1安装Nginxyuminstallnginx-ycat/etc/nginx/conf.d/elk.confserver{ listen5555;......
  • 多年学习django经验markdown总结,基础到高手,共计50页,10大模块。 第(1)期
    Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(DoNotRepeatYourself)原......
  • Django+celery+eventlet+flower+redis异步任务创建及查询实现
    1.环境版本:Django3.2.12celery5.3.4eventlet0.33.3flower2.0.1redis3.5.3项目名称:new_project2.celery配置(settings.py)#celery#django-celery配置的部分#Broker配置,使用Redis作......
  • Filebeat收集系统日志实践
    3.1系统日志有哪些系统日志其实很宽泛、通常我们说的是messages、secure、cron、dmesg、ssh、boot等日志3.2系统日志收集思路系统中有很多日志,挨个配置收集就变得非常麻烦了。所以我们需要对这些日志进行统一、集中的管理。可以通过rsyslog将本地所有类型的日志都写入/var/l......
  • 图书推荐与管理系统Python+协同过滤推荐算法+Django网页界面
    一、介绍图书管理与推荐系统。使用Python作为主要开发语言。前端采用HTML、CSS、BootStrap等技术搭建界面结构,后端采用Django作为逻辑处理,通过Ajax等技术实现数据交互通信。在图书推荐方面使用经典的协同过滤算法作为推荐算法模块。主要功能有:角色分为普通用户和管理员普通用户可注......