首页 > 其他分享 >记- django通过celery beat results实现定时任务

记- django通过celery beat results实现定时任务

时间:2023-03-07 23:00:32浏览次数:35  
标签:beat app py results django celery ManagerCenter

1. 实验环境

python版本:3.7.8

django版本:3.2.15

celery版本:5.2.7

django-celery版本:3.2.1

django-celery-beat版本:2.4.0

django-celery-results版本:2.4.0

django-redis版本:5.2.0

eventlet版本:0.33.3 (这个在windows下测试使用)

2. 根据以上安装模块,主要安装:

  django-celery-beat模块:用于定时任务

  django-celery-results模块:用于保存结果数据

3. django配置

假设我的项目名称为:ManagerCenter, 应用名称为:task_app

  •  创建文件:ManagerCenter / ManagerCenter / celery.py
import os
from celery import Celery
from django.conf import settings

# 设置celery的环境变量和django-celery的工作目录
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ManagerCenter.settings")
# 实例化celery应用
app = Celery("ManagerCenter")
# 加载celery配置
app.config_from_object(settings)

# 如果在项目中,创建了task.py,那么celery就会沿着app去查找task.py来生成任务
app.autodiscover_tasks()
  • 设置配置文件: ManagerCenter / ManagerCenter / settings.py
INSTALLED_APPS = [
    ......
    'django_celery_results',
    'django_celery_beat',
]

CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT=['json']
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERY_ENABLE_UTC = True

BROKER_URL = 'redis://172.172.172.188:6379/1'  # redis数据库地址,中间人用于接收任务入队列
CELERY_RESULT_BACKEND = 'django-db'  # 使用数据库接收返回的结果
CELERYBEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
  • 编辑文件: ManagerCenter / ManagerCenter / __init__.py
from .celery import app as celery_app
__all__ = ['celery_app']
  • 创建任务文件:task_app / tasks.py
from __future__ import absolute_import, unicode_literals

from ManagerCenter.celery import app

@app.task()
def add():
    HttpResponseprint('11111111')
    return 1 + 2

4. 启动运行django服务,我是使用pycharm开发测试,直接启动完成

5. 进入到ManagerCenter目录下,打开doc窗口,运行如下:

  • python.exe .\manage.py migrate django_celery_beat
  • python.exe .\manage.py migrate django_celery_results

  执行完成后,会在数据库中生成: beat和result的相关表

6. 登录django的管理控制台: http://127.0.0.1:8000/admin ,会看到:CELERY RESULTS(这个是收集结果)标签块和PERIODIC TASKS标签块(这个是存放定时任务)

  创建一个定时任务:

    新建:“crontabs”,在 minutes:设置 */1 (表示每分钟执行一次),保存。

    新建:“periodjc tasks”, 

        name : 自定义,  Task (registered): 选择 task_app.tasks.add,  Crontab Schedule: 选择上一步创建的, 最后保存即可。

7. 启动celery,进入到ManagerCenter目录下

  • 首先启动worker异步任务: 
    windows:  celery.exe -A ManagerCenter worker -l info -P eventlet
    linux: celery.exe -A ManagerCenter worker -l info
  • 然后启动beat丁定时任务:
    celery -A ManagerCenter beat -l info
等1分钟就能看到beat窗口出现发送任务队列。 worker窗口出现任务结果数据。

结尾:以上可以实现一个定时任务的测试

标签:beat,app,py,results,django,celery,ManagerCenter
From: https://www.cnblogs.com/zy6103/p/17190080.html

相关文章

  • windows下使用nginx + waitress 部署django
    虽然不喜欢IIS,不过有些项目又必须部署在windows上,windows下部署django的方案有IIS+wfastcgi,apache+mod_wsgi,也有超简单的部署方式如:nginx+waitress,本文主要讲的是最......
  • Django项目部署到云端后静态资源无法加载
    1.Django项目在开发阶段一直都是在本地调试,开发的差不多了得部署到云端,然后整个项目打包到云端运行后访问,发现静态资源无法加载。之前seeting.py里面的配置如下:STATIC_UR......
  • django框架
    目录django1、django推导流程2、django介绍及基本使用3、django目录结构、app概念和三板斧的初步介绍4、django静态文件、form表单和request对象5、django连接数......
  • 【django-vue】登录注册模态框分析 登录注册前端页面 腾讯短信功能二次封装 短信验证
    目录昨日回顾csrf跨站请求伪造接口幂等性异常捕获今日内容1登录注册模态框分析Login.vueHeader.vue2登录注册前端页面复制2.0Header.vue2.1Login.vue2.2Register.vue3......
  • Django框架课-多人联机对战 (一)
    Django框架课-多人联机对战(一)统一度量单位比如这两个地图,有的玩家是第一种,有的玩家的屏幕是第二种。第一种地图的玩家移动到地图的左部分,在第二种地图里就可能已经出......
  • filebeat对接kafka
    一般数据采集主要使用elk,为了提高数据采集性能和效率,filebeat采集日志发送给kafka,logstash从kafka消费数据存入es。主要记录使用以防忘记    一、kafka集群部署......
  • 使用pycharm2022社区版搭建Django
    因为使用的是pycharm社区版,免费的没有直接搭建Django项目,所以查了半天资料,摸索了半天,才跑起来,用此文记录下。1.使用pycharm创建项目,安装项目创建好后,大概会有个虚拟环......
  • django学习
    1.准备工作需要安装Django包需要启动mysql服务,并创建一个数据库需要安装pymysql服务,代码如下:pipinstallpymysql==版本创建Django项目新建django项目出......
  • Django-2
    1.获取多个数据及文件的上传和接收request.POSTrequest.GETrequest.FILESrequest.POST.getlist()注意:上传文件form的特殊设置:<formaction=""method="POST"e......
  • 08-Redis系列之-Redis布隆过滤器,MySQL主从,Django读写分离
    Redis实现布隆过滤器前言布隆过滤器使用场景比如有如下几个需求:原本有10亿个号码,现在又来了10万个号码,要快速准确判断这10万个号码是否在10亿个号码库中?解决办......