Django中使用Celery和APScheduler实现定时任务

news2024/11/16 9:29:44

在之前的文章我们已经学习了Celery和APScheduler的基本使用,下面让我们来了解一下如何在Django中使用Celery和APScheduler

Celery

1.前提工作

python 3.7
pip install celery
pip install eventlet
#5.0版本以下
pip install importlib-metadata==4.8.3(python3.7下可能会出现报错)

2.项目结构

3.异步任务

#tasks.py
from ..main import celery_app
# 装饰器将send_sms_code装饰为异步任务,并设置别名
@celery_app.task(name='send_sms_code')
def send_sms_code(mobile, sms_code):
    print("向手机号{}发送验证码{}".format(mobile,sms_code))
# config.py
broker_url = "redis://127.0.0.1:6379/7"
#main.py
# celery启动⽂件
from celery import Celery
import os

#配置环境
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoProject7.settings')
# 创建celery实例
celery_app = Celery('test')
# 加载celery配置
celery_app.config_from_object('celery_tasks.config')
# ⾃动注册celery任务
celery_app.autodiscover_tasks(['celery_tasks.sms'])

命令启动:

与manage.py平级,执行命令celery -A celery_tasks.main  worker -l info -P eventlet

编写视图函数和路由:

#views.py
from django.shortcuts import render,HttpResponse
from celery_tasks.sms import tasks
# Create your views here.
def index(request):
    tasks.send_sms_code("13417361123","123456")
    return HttpResponse("111")

#urls.py
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/',views.index)
]

 启动项目,然后访问视图即可

4.定时任务

代码只需要改config.py即可:

# config.py
broker_url = "redis://127.0.0.1:6379/7"
from celery_tasks.main import celery_app
from celery.schedules import crontab

#设置定时任务
from datetime import timedelta

# 设置定时任务
celery_app.conf.beat_schedule = {
    "test_task": {
        "task": "send_sms_code",
        # "schedule": crontab(hour=11, minute=28),# 每天的11点28分执行一次任务
        "schedule": timedelta(seconds=1),  # 每秒执行一次任务
        "args": ("13417366781","1111"),  # 这里是传递给任务的参数,元组形式
    }
}

然后在终端启动分别执行两条命令(开两个终端执行):

celery --app=celery_tasks.main worker -P eventlet -l INFO
celery -A celery_tasks.main beat

APScheduler

1.前提工作

pip install django-apscheduler

 2.配置

在settings.py中加入

INSTALLED_APPS = (
    # ...
    "django_apscheduler",
)

apscheduler存在数据库依赖,所以得配置一下数据库信息:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'root',
        'PASSWORD': '547710',
        'HOST': 'localhost',
        'PORT': '3306'
    }
}

然后运行python manage.py migrate,接着会在数据库中生成两张表:

django_apscheduler_djangojob 表保存注册的任务以及下次执行的时间

django_apscheduler_djangojobexecution 保存每次任务执行的时间和结果和任务状态

3.使用

#views.py
from django_apscheduler.jobstores import DjangoJobStore, register_job

from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime

scheduler = BlockingScheduler()  # 创建调度器
scheduler.add_jobstore(DjangoJobStore(), "default")

#添加定时任务方式一
@register_job(scheduler, "interval", seconds=5, id="func", replace_existing=True, misfire_grace_time=120)
def job():
    print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

# 添加定时任务方式二
def job1():
    print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
scheduler.add_job(
        job1,
        'interval',
        seconds=5,
        id='my_job',  # 任务的唯一标识
        replace_existing=True,
)

scheduler.start()

 4.启动

在终端运行python manage.py runserver,效果如下

数据库表记录(有时间差8小时,这个去配置时区即可): 

django_apscheduler_djangojob

django_apscheduler_djangojobexecution  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1788819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

批量修改文件

最近几个月的文章都直接发在公众号上,没有同步到博客上,想去同步时发现已经有不少了,一个个修改太麻烦了。 之前没规划好,所以博客文章都是直接放在仓库一个目录下,数量多了之后,有点乱,不好管…

工业交换机如何防止广播风暴

工业交换机作为网络设备的重要组成部分,在网络中起到了连接各个设备和传输数据的重要作用。然而,广播风暴是工业交换机面临的一个常见问题,会影响网络性能和稳定性。为了防止广播风暴的发生,工业交换机可以采取一系列有效的措施。…

[数据集][目标检测]吉他检测数据集VOC+YOLO格式66张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):66 标注数量(xml文件个数):66 标注数量(txt文件个数):66 标注类别数…

qt中使用QSLite时发现query.value(0).toInt()未获取数据问题

1、首先确保数据库名没有问题 2、确保正常连接 3、非常重要的一点:query.value(0).toInt()之前,必须要有query.first(),非常重要,缺少了这个会一直查不到

ruoyi-nbcio基于jeecg的flowable前端支持自定义表单组件的自动获取方法

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…

什么时候需要用到 @EnableWebSecurity 注解?

有小伙伴在学习 Spring Security 的遇到一个问题: 箭头所指的位置报红,也就是 Spring 容器中没有找到一个类型为 HttpSecurity 的 Bean。 小伙伴说如果他在配置类上加 EnableWebSecurity 注解,就不报错;不加该注解则会报错。那么…

如何快速定位到影响mysql cpu飙升的原因——筑梦之路

通常我们只需要执行show processlist 进行查看,一般执行时间最长的SQL八九不离十就是罪魁祸首,但当show processlist的输出有近千条,那么很难第一眼就发现有问题的SQL,那么如何快速找到呢?其实也非常简单。我们知道mys…

什么样的男士内裤比较好?按这个方法选男士内裤不会出错!

男士内裤作为日常穿着的重要服饰,其舒适度与卫生性对男士们的健康至关重要。随着时代的变迁,男士内裤的款式与材质也日益丰富多样,为男士们提供了更多选择。 目前市场上,男士内裤主要分为三角、平角和四角三大类别。其中&#xf…

直播商城源码-PC+APP+H5+小程序现成源码

随着电商行业的不断演进,直播商城已成为连接消费者和商品的新兴桥梁。直播商城源码提供了一个完整的解决方案,使得企业能够迅速搭建起一个覆盖PC、APP、H5和小程序的全渠道电商平台。本文将探讨直播商城源码的优势、关键功能以及如何选择适合的现成源码。…

ai对话虚拟人app有哪些?一起来看看这3款

ai对话虚拟人app有哪些?在当前的科技浪潮中,AI对话虚拟人app已经成为我们日常生活中的得力助手。它们不仅提供了更加智能、便捷的交流和信息服务,还让我们能随时随地与AI伙伴进行深度互动。这些app的广泛应用,不仅提升了我们的生活…

目标检测数据集 - 海洋垃圾检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍:海洋垃圾检测数据集,真实拍摄海洋海底场景高质量垃圾检测图片数据,涉及场景丰富,比如海底塑料垃圾数据、海底铁制品罐状垃圾数据、海底纸张垃圾数据、海洋生物和海底垃圾同框数据、海底探索仪器和海底垃圾同框数据、海…

期刊的分类与级别

在学术界,期刊的分类与级别构成了一个评价学术成果和学者贡献的重要标准,同时也是学术出版与学术交流的基础。然而,对于初涉学者来说,理解期刊的分类与级别可能并不直观。本文旨在提供一个系统性的解释,并阐述为何期刊…

LeetCode刷题之HOT100之跳跃游戏

2024/6/5 今天下起了绵密细雨,空气清新很多。昨晚做的梦较魔幻,可能也是导致我睡觉时业已破损的小米手环8的表腕断裂的因素之一。来到实验室,打扫一下卫生,听听歌,做道题。好不自在呀! 1、题目描述 2、逻辑…

SD NAND的垃圾回收机制:无人机数据管理的隐形守护者

随着科技的飞速发展,无人机在各个领域的应用越来越广泛,从航拍到物流配送,再到农业监测,无人机正逐渐成为我们生活中不可或缺的一部分。而SD NAND作为一种创新的存储芯片,可以直接贴片使用,具有小尺寸、高可…

基于SpringBoot+Vue旅游民宿信息管理系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还…

Qt报错:libvlc开发的程序,出现Direct3D output全屏窗口

问题描述: 在qt中开发重播模块时,第一次在窗口正常播放,点击重播按钮后会弹出新的Direct3D output窗口播放视频 分析: 因为libvlc_media_player_set_hwnd 这个函数 设置了不存在的窗口句柄,导致vlc视频播放窗口没有嵌…

python11 序列的相关操作

枚举遍历 序列的相关操作 text "hello,python" # in 判断字符是否在序列中,存在返回true,否则返回false print(p是否存在:,(p in text)) print(a是否存在:,(a in text)) # not in 判断字符不在序列中,不存在返回true,否则返回false print(p不…

数据仓库与数据挖掘总复习练习2-3(实验六 2024.6.5)

一、练习2 is_unique是否值唯一 range(范围,步长) head()、tail()默认显示5条 缺失值情况 计算(最少多少元素求和、元素相乘) pct_change() latax(工具:专用于写公式&a…

贰[2],VisionMaster/.NetCore的WPF应用程序调用控件

1,环境 VisionMaster4.2 VisualStudio2022 WPF/.Net6.0 2,记录原因 .NetFrameWork的WPF应用程序调用添加例程.NetFrameWork的Winform应用程序相应的库,不会出现报错,界面也能正常显示操作,但是.NetCore的程序却总是报错。 2.1,.NetFrameWork的WPF应用程序 注:但是.…

深度学习——卷积神经网络(CNN)

深度学习 深度学习就是通过多层神经网络上运用各种机器学习算法学习样本数据的内在规律和表示层次,从而实现各种任务的算法集合。各种任务都是啥,有:数据挖掘,计算机视觉,语音识别,自然语言处理等。‘ 深…