Django+celery+flower
Django+celery+flower
- Django的定时任务及可视化监控
- Django
Django的定时任务及可视化监控
Django的定时任务,以及可视化监控。
Django
- Django;
首先在python中新建虚拟环境并激活
pip install virtualenv
python -m venv venv
source venv/bin/activate
pip install django #安装django
安装
- 创建django项目;
django-admin startproject myproject
cd myproject
启动Django开发服务器:
python manage.py runserver
默认情况下,服务器会运行在 http://127.0.0.1:8000/。
完成后,可以停用虚拟环境:
deactivate
- redis;
这里使用源码安装,参考redis官网
新开一个窗口,不在python虚拟环境操作
wget https://download.redis.io/redis-stable.tar.gz
tar -xzvf redis-stable.tar.gz
cd redis-stable
make
sudo yum install openssl-devel
make BUILD_TLS=yes
sudo make install
cp redis.conf /etc/
redis-server /etc/redis.conf
检查redis是否启动
redis-cli
127.0.0.1:6379> ping
PONG #成功
- celery简单示例;
安装
pip install celery django-celery-beat
新建一个应用
python manage.py startapp myapp
将 myapp 和 django_celery_beat 添加到 INSTALLED_APPS 中,编辑 myproject/settings.py 文件:
INSTALLED_APPS = [...'django_celery_beat','myapp',
]
在 myproject 文件夹下创建一个名为 celery.py 的文件,并添加以下内容:
import os
from celery import Celeryos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
app = Celery('myproject')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
在 myproject/init.py 文件中添加以下内容:
from .celery import app as celery_app__all__ = ('celery_app',)
在 myproject/settings.py 文件中添加 Celery 配置:
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
CELERY_TIMEZONE = "Asia/Shanghai"
CELERY_ENABLE_UTC = False
在 myapp 文件夹下创建一个名为 tasks.py 的文件,并定义一个简单的定时任务:
from celery import shared_task
import datetime@shared_task
def print_time():now = datetime.datetime.now()print(f"Current time: {now}")
在 myproject/celery.py 文件中定义定时任务的调度计划:
from celery.schedules import crontabapp.conf.beat_schedule = {'print-time-every-minute': {'task': 'myapp.tasks.print_time','schedule': crontab(minute='*'),},
}
这里定义了一个名为 print-time-every-minute 的定时任务,它会每分钟执行一次 myapp.tasks.print_time 任务。
启动 Celery worker:
celery -A myproject worker -l info
启动 Celery beat:
celery -A myproject beat -l info
启动 Django 开发服务器:
python manage.py runserver
查看结果
在终端中可以看到 Celery beat 每分钟调度一次 print_time 任务,并在 Celery worker 的终端中打印当前时间。
- 定时任务时间写法;
在 Celery 中,定时任务的定时时间可以通过多种方式指定,主要包括以下几种常见的写法
1)使用 crontab,例如每分钟、每小时、每天、每周等
from celery.schedules import crontabapp.conf.beat_schedule = {'print-time-every-minute': {'task': 'myapp.tasks.print_time','schedule': crontab(minute='*'), # 每分钟执行一次},'print-time-every-hour': {'task': 'myapp.tasks.print_time','schedule': crontab(minute=0, hour='*'), # 每小时的第0分钟执行一次},'print-time-every-day': {'task': 'myapp.tasks.print_time','schedule': crontab(minute=0, hour=0), # 每天的凌晨0点执行一次},'print-time-every-week': {'task': 'myapp.tasks.print_time','schedule': crontab(minute=0, hour=0, day_of_week=1), # 每周一凌晨0点执行一次},
}
参数说明:
minute:分钟,范围是 0-59。
hour:小时,范围是 0-23。
day_of_week:星期几,范围是 0-6,其中 0 表示星期天。
2)使用 timedelta,指定任务的执行间隔,例如每几秒、几分钟、几小时等。
from datetime import timedeltaapp.conf.beat_schedule = {'print-time-every-10-seconds': {'task': 'myapp.tasks.print_time','schedule': timedelta(seconds=10), # 每10秒执行一次},'print-time-every-15-minutes': {'task': 'myapp.tasks.print_time','schedule': timedelta(minutes=15), # 每15分钟执行一次},'print-time-every-2-hours': {'task': 'myapp.tasks.print_time','schedule': timedelta(hours=2), # 每2小时执行一次},
}
3)timedelta 的固定时间间隔,需要任务在固定的时间间隔内执行,可以使用 timedelta 的组合
from datetime import timedeltaapp.conf.beat_schedule = {'print-time-every-1-hour-30-minutes': {'task': 'myapp.tasks.print_time','schedule': timedelta(hours=1, minutes=30), # 每1小时30分钟执行一次},'print-time-every-2-days-12-hours': {'task': 'myapp.tasks.print_time','schedule': timedelta(days=2, hours=12), # 每2天12小时执行一次},
}
4)crontab 的高级组合,支持更复杂的组合,例如指定特定的分钟、小时、星期几等
from celery.schedules import crontabapp.conf.beat_schedule = {'print-time-specific-time': {'task': 'myapp.tasks.print_time','schedule': crontab(minute=30, hour=14, day_of_week='mon,tue,wed'), # 每周一、二、三的下午2点30分执行一次},'print-time-specific-dates': {'task': 'myapp.tasks.print_time','schedule': crontab(minute=0, hour=0, day_of_month='1,15'), # 每月的1号和15号凌晨0点执行一次},
}
参数说明:
minute:可以指定具体的分钟,例如 30 或 0,15,30,45。
hour:可以指定具体的小时,例如 14 或 0-23。
day_of_week:可以指定具体的星期几,例如 mon,tue,wed 或 1-5。
day_of_month:可以指定具体的日期,例如 1,15。
5)crontab 的通配符指定更灵活的时间。
from celery.schedules import crontabapp.conf.beat_schedule = {'print-time-every-other-minute': {'task': 'myapp.tasks.print_time','schedule': crontab(minute='*/2'), # 每隔2分钟执行一次},'print-time-every-other-hour': {'task': 'myapp.tasks.print_time','schedule': crontab(minute=0, hour='*/2'), # 每隔2小时执行一次},'print-time-every-weekday': {'task': 'myapp.tasks.print_time','schedule': crontab(minute=0, hour=0, day_of_week='1-5'), # 每个工作日的凌晨0点执行一次},
}
参数说明:
minute=‘/2’:每隔2分钟执行一次。
hour='/2’:每隔2小时执行一次。
day_of_week=‘1-5’:表示星期一到星期五。
6)timedelta 的动态间隔,动态调整任务的执行间隔,可以在任务中动态修改 beat_schedule
from datetime import timedelta
from celery import shared_task@shared_task
def dynamic_task():print("Dynamic task executed")# 修改任务的执行间隔app.conf.beat_schedule['dynamic-task']['schedule'] = timedelta(seconds=30)app.conf.beat_schedule = {'dynamic-task': {'task': 'myapp.tasks.dynamic_task','schedule': timedelta(seconds=10), # 初始间隔为10秒},
}
- flower;
安装flower
pip install flower
启动,启动之前确保celery已经配置好并运行正常
celery -A myproject flower --port=5555 --broker=redis://localhost:6379/0
加密启动
celery -A myproject flower --port=5555 --broker=redis://localhost:6379/0 --basic_auth=user:password
配置celery,在 Celery 配置中启用事件发送功能,在 myproject/celery.py 文件中添加以下配置:
app.conf.update(worker_send_task_events=True, # 启用任务事件发送task_send_sent_event=True, # 启用任务发送事件
)
在浏览器中访问 http://127.0.0.1:5555/,即可看到 Flower 的监控界面

相关文章:
Django+celery+flower
Djangoceleryflower Django的定时任务及可视化监控Django Django的定时任务及可视化监控 Django的定时任务,以及可视化监控。 Django Django; 首先在python中新建虚拟环境并激活 pip install virtualenv python -m venv venv source venv/bin/activa…...
MapReduce处理数据流程
(一)Shuffle MapReduce中的Shuffle过程指的是在Map方法执行后、Reduce方法执行前对数据进行分区排序的阶段 (二)处理流程 1. 首先MapReduce会将处理的数据集划分成多个split,split划分是逻辑上进行划分,…...
基于springboot的教务系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 这些年随着Internet的迅速发展,我们国家和世界都已经进入了互联网大数据时代,计算机网络已经成为了整个社会以及经济发展的巨大动能,各个高校的教务工作成为了学校管理事务的重要目标和任务,因此运用互联网技术来提高教务的…...
潮流霓虹酸性渐变液体流体扭曲颗粒边缘模糊JPG背景图片设计素材 Organic Textures Gradients Collection
这个系列将液体运动、霓虹灯和热浪扭曲提炼成一组有机纹理。渐变像水面上的油一样荡漾,模糊了科幻小说与自然之间的界限。这种未来主义的边缘,加上近乎生物的感觉,与正在进行的抽象数字超现实主义浪潮完美同步。 这套具有 20 种原始纹理和 20…...
现代时尚标签海报包装网站设计几何风PSAI无衬线英文字体安装包 Matahari Sans Font Family
Matahari(英语:Sun)是生命的动力源泉。与日常生活的其他部分协同作用的力量和能量的象征。这是我们人类需要的最基本的东西之一,就像交流一样。就像 Matahari 本身一样,文字的力量足以维持生计。 参考怪诞字体并受到埃…...
Spring MVC响应数据
handler方法分析 /*** TODO: 一个controller的方法是控制层的一个处理器,我们称为handler* TODO: handler需要使用RequestMapping/GetMapping系列,声明路径,在HandlerMapping中注册,供DS查找!* TODO: handler作用总结:* 1.接收请求参数(param,json,pathVariable,共享域等…...
jmeter验证正则表达式提取值是否正确
正则提取 验证提取是否正确...
共注意力机制及创新点深度解析
一、核心原理剖析 1. 基本思想 共注意力机制(Co-Attention)通过建立双向注意力交互通道,同步学习图像和问题两个模态的关键信息。与传统单向注意力相比,其核心创新在于: 双向信息流:图像特征和问题特征…...
联想台式电脑启动项没有U盘
开机按F12,进入启动设备菜单,发现这里没有识别到插在主机的U盘? 解决方法 1、选上图的Enter Setup或者开机按F2,进入BIOS设置 选择Startup -> Primary Boot Sequence 2、选中“Excludeed from boot order”中U盘所在的一行 …...
基于 Python 爬取 TikTok 搜索数据 Tiktok爬虫(2025.3.17)
1. 前言 在数据分析和网络爬虫的应用场景中,我们经常需要获取社交媒体平台的数据,例如 TikTok。本篇文章介绍如何使用 Python 爬取 TikTok 用户搜索数据,并解析其返回的数据。 结果截图 2. 项目环境准备 在正式运行代码之前,我…...
【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解
【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解 (图1-1) 一、鸿蒙中App、HAP、HAR、HSP是什么? (1)App Pack(Application Package) 是应用发布的形态,上架应用市场是以App Pa…...
计算机二级MS之Excel
声明:跟着大猫和小黑学习随便记下一些笔记供大家参考,二级考试之前将持续更新,希望大家二级都能轻轻松松过啦,过了二级的大神也可以在评论区留言给点建议,感谢大家!! 文章目录 考题难点&#x…...
Unity导出WebGL,无法加载,data文件无法找到 404(NotFound)
问题:data文件无法找到404Not found 示例是使用IIS托管启动 F12可以看到not found 的报错 解决办法: iis无法识别data文件,在MIME类型中增加data 类型:application/octet-stream 添加之后,会在根目录下生产一个…...
洛谷题目: P1225 黑白棋游戏 题解 (本题难)
题目传送门: P1225 黑白棋游戏 - 洛谷 (luogu.com.cn) 前言: 这道题要求我们找出从黑白棋游戏的初始棋盘状态变化到目标棋盘状态的最短着棋序列,也就是要找到最少的交换相邻方格棋子的步数以及每一步具体的交换位置。我们可以使用广度优先…...
网络安全技术分析:攻防演进、核心技术与未来挑战
本文系统梳理网络安全技术发展脉络,聚焦漏洞利用、威胁检测、数据保护三大核心领域,结合APT攻击、勒索软件、零日漏洞等典型案例,解析防火墙、IDS、零信任架构等技术原理。通过分析2023年全球重大安全事件(如MOVEit漏洞攻击、Lock…...
SpringBoot与Redisson整合,用注解方式解决分布式锁的使用问题
文章引用:https://mp.weixin.qq.com/s/XgdKE2rBKL0-nFk2NJPuyg 一、单个服务 1.代码 该接口的作用是累加一个值,访问一次该值加1 RestController public class LockController {Autowiredprivate StringRedisTemplate stringRedisTemplate;GetMappin…...
通过Typora + PicGo + 阿里云对象存储(OSS)实现图床
文章目录 通过Typora PicGo 阿里云对象存储(OSS)实现图床1 准备工作1.1 阿里云对象存储 OSS配置创建oss存储空间bucket获取AccessKey 1.2 PicGo配置1.3 Typora配置 2 使用流程3 常见问题和解决3.1 创建asesskey3.2 You have no right to access this o…...
爱普生FC-12M石英晶体谐振器精准时钟源解决方案
在当今数字化时代,电子设备无处不在,从我们日常使用的智能手机、平板电脑,到复杂的工业控制系统、通信基站,每一台设备的稳定运行都离不开精准的时钟信号。而在众多提供时钟信号的元件中,爱普生 FC-12M 石英晶体谐振器…...
【css酷炫效果】纯CSS实现手风琴折叠效果
【css酷炫效果】纯CSS实现手风琴折叠效果 缘创作背景html结构css样式完整代码效果图 想直接拿走的老板,链接放在这里:https://download.csdn.net/download/u011561335/90492015 缘 创作随缘,不定时更新。 创作背景 刚看到csdn出活动了&am…...
AI辅助的逆向分析
AI大模型结合反编译工具与AI的辅助分析能力,已能实现部分代码逻辑的还原与重构。 1. 技术实现路径 (1)二进制文件预处理与反编译 反编译工具:需先使用IDA Pro、Ghidra等工具将二进制文件转换为低级中间表示(如汇编代…...
物理标签与逻辑标签的区别
物理标签和逻辑标签都可以被机器(如浏览器、爬虫、屏幕阅读器)解析和识别,但它们的 语义信息 对机器的意义不同。以下是详细解释: 1. 物理标签的解析 可以识别:浏览器会正确解析物理标签(如 <b>、<…...
脚本语言 Lua
概念 Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译、运行。Lua脚本可以很容易地被C/C 代码调用,也可以反过来调用C/C的函数,这使得Lua在应用程序中可以被广泛应用。Lua并没有提供强大的库,它是不适合作为开发独立应…...
《Linux 网络架构:基于 TCP 协议的多人聊天系统搭建详解》
一、系统概述 本系统是一个基于 TCP 协议的多人聊天系统,由一个服务器和多个客户端组成。客户端可以连接到服务器,向服务器发送消息,服务器接收到消息后将其转发给其他客户端,实现多人之间的实时聊天。系统使用 C 语言编写&#x…...
目前主要虚拟世界平台在单一实例承载人数和伺服器架构的综合比较分析(从开资料和技术推估):
目前主要虚拟世界平台在单一实例承载人数和伺服器架构的综合比较分析(从开资料和技术推估): 1. 《Fortnite》(Epic Games) 一般游戏模式约 100人/场,但大型活动(如演唱会)采用分层串…...
鸿蒙NEXT项目实战-百得知识库04
代码仓地址,大家记得点个star IbestKnowTeach: 百得知识库基于鸿蒙NEXT稳定版实现的一款企业级开发项目案例。 本案例涉及到多个鸿蒙相关技术知识点: 1、布局 2、配置文件 3、组件的封装和使用 4、路由的使用 5、请求响应拦截器的封装 6、位置服务 7、三…...
函数的介绍
1.函数的概念 在C语言中也有函数的概念,有些翻译为:子程序,这种翻译更为准确。C语言的函数就是一个完成某项特定的任务的一小段代码。这段代码是有特殊的写法和调用方法的。 C语言的程序其实是有无数个小的函数组合而成的,也可以…...
源自Deformable Convolutional Networks的一种可变形卷积实现解析
衍生记录:深度学习pytorch之简单方法自定义9类卷积即插即用 文章目录 概述1. 可变形卷积的背景2. DeformConv2D概述2.1 构造函数分析2.2 前向传播函数解析2.2.1 偏移量的计算与应用2.2.2 目标位置的计算2.2.3 四个角的插值2.2.4 双线性插值的权重2.2.5 特征图的采样…...
记一次性能调优-20250320
2月份年后上班,刚过完年,还没从喜悦中解放出来,凌晨3点的时候同事就给我打电话,晚上的批量处理任务卡住了,快帮忙看看,做了几分钟的心里建设之后从被窝爬起来,看着手机上好几电话,赶…...
Postman高级功能深度解析:Mock Server与自动化监控——构建高效API测试与监控体系
引言:Postman在API开发中的核心价值 在数字化时代,API(应用程序编程接口)已成为系统间交互的“神经网络”,其质量直接影响用户体验与业务连续性。然而,传统API测试面临两大挑战: 开发阶段依赖…...
【最后203篇系列】020 rocksdb agent
今天还是挺开心的一天,又在工具箱里加了一个工具。嗯,但是快下班的时候也碰到一些不太顺心的事,让我有点恼火。我还真没想到一个专职的前端,加测试,以及其他一堆人,竟然不知道后端返回的markdown,在前端渲染…...
