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

在之前的文章我们已经学习了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.sqlite3',
        '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  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Git系列:rev-parse 使用技巧

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【机器学习300问】106、Inception网络结构如何设计的?这么设计的目的是什么?

谷歌的Inception网络,也被称为GoogLeNet,是Google在2014年推出的一种深度卷积神经网络(CNN)模型,在这之前的AlexNet、VGG等结构都是通过增大网络的深度(层数)来获得更好的训练效果,但…

车载监控解决方案在工程机械行业的应用

随着科技的快速发展,现代工程机械行业正迎来一场智能化、信息化的革命。GPS、4G通信、车载监控以及车载智能应用等技术的综合运用,为工程机械的安全作业提供了全方位、全时段的保障。本文以挖掘机为例,探讨车载监控解决方案在工程机械行业的广…

cleanmyMac有必要吗,什么软件可以替代clean my mac

最近总有苹果用户抱怨mac电脑变得非常卡顿,而且总会收到“您的启动磁盘几乎已经满了”的系统提示。提示出现的原因是我们长期未对电脑进行健康扫描和深度清理导致的。遇到这种情况,我们可以借助专业的电脑深度清理软件——CleanMyMac X,清理不…

漫画:什么是通用人工智能?

窄人工智能,对应英文Artificial Narrow Intelligence,简称ANI,也被称为特定任务人工智能。 顾名思义,窄人工智能用于完成某一项或几项特定的任务,比如智能驾驶、人脸识别、AlphaGo、AI绘画、大语言模型等等&#xff0c…

【Linux】Linux工具——yum,vim

1.Linux 软件包管理器——yum Linux安装软件: 源代码安装(不建议)rpm安装(类似Linux安装包,版本可能不兼容,不推荐,容易报错)yum安装(解决了安装源,安装版本&…

FL Studio Producer Edition 21.2.3.4004全插件+Crack下载链接(亲测可用,非钓鱼)

FL Studio 21.2.3.4004中文版 中文别名水果编曲软件,是一款全能的音乐制作软件,包括编曲、录音、剪辑和混音等诸多功能,让你的电脑编程一个全能的录音室,它为您提供了一个集成的开发环境,使用起来非常简单有效&#xf…

Java实战:从文件读出学生列表

本实战项目的目标是从文本文件中读取学生列表,并验证读取过程的正确性通过单元测试。 创建静态方法 实现一个名为readStudentsFromFile的静态方法,该方法接收一个文件路径作为参数。创建一个Student对象的列表,用于存储从文件中读取的学生信息…

Java实战:将学生列表写入文件

本实战项目旨在演示如何使用Java语言将学生信息列表写入到一个文本文件中,并进行单元测试以确保代码的正确性。 创建静态方法 定义一个名为writeStudentsToFile的静态方法,该方法接收两个参数:一个Student对象的列表和一个文件路径。使用File…

Ultralytics x SwanLab:可视化YOLO模型训练

Ultralytics是YOLO官方团队推出的CV训练与推理框架,不仅支持目标检测任务,还支持分割、姿态识别、分类等更多任务。 SwanLab是一个深度学习实验管理与训练可视化工具,由西安电子科技大学团队打造,融合了Weights & Biases与Ten…

【协议开发系列】梳理关于TCP和UDP两种协议的区别和使用场景

起源 前二天项目上在核对外部对接服务的五元组列表的时候,有一位客户提问对于同样的服务同时支持tcp和udp二种方式,有什么优点和缺点,应该如何选择?这个问题突然让我愣了一下,确实好久没有“温故”了,相关…

算法每日一题(python,2024.05.26) day.8

题目来源(力扣. - 力扣(LeetCode),简单) 解题思路: 双指针+交换,使用left和right两个指针,right指针向右移动,left从数组首位开始,当right找到非…

实时数据传输:Django 与 MQTT 的完美结合

文章目录 准备工作创建 Django 项目与应用设置 MQTT 服务器编写 Django 视图编写前端模板发布 MQTT 消息运行 Django 项目 在当今互联网应用中,实时数据传输已经成为许多项目的核心需求。无论是社交媒体平台、在线游戏、金融交易还是物联网设备,都需要及…

微信小程序实现上传视频 / 上传图片功能以及整合上传视频 / 上传图片功能(超详细)

上传视频功能 效果如下: <!-- 上传 S --><view class"img-list"><!-- 上传列表 --><view class"upload-video"><block wx:if"{{src ! }}"><video src"{{src}}" class"img-li"></vi…

STL:stack和queue

文章目录 stack的介绍和使用stack的介绍stack的使用stack的模拟实现 queue的介绍和使用queue的介绍queue的使用queue的模拟实现 priority_queue的介绍和使用priority_queue的介绍priority_queue的使用优先级队列的模拟实现 deque的介绍deque的结构deque的缺陷为什么选择deque作…

Codeforces Round 949 (Div. 2 ABCD) 视频讲解

A. Turtle and Piggy Are Playing a Game Problem Statement Turtle and Piggy are playing a number game. First, Turtle will choose an integer x x x, such that l ≤ x ≤ r l \le x \le r l≤x≤r, where l , r l, r l,r are given. It’s also guaranteed that …

数据库与缓存⼀致性⽅案

数据库与缓存⼀致性⽅案 1、背景2、数据⼀致性⽅案设计3、数据⼀致性⽅案流程图4、关键代码4.1、 处理数据⼀致性的消息队列⼊⼝4.2、数据⼀致性配置的常量信息1、背景 现有的业务场景下,都会涉及到数据库以及缓存双写的问题,⽆论是先删除缓存,再更新数据,或者先更新数据,…

HCIP-Datacom-ARST自选题库__MAC【14道题】

一、单选题 1.缺省情况下&#xff0c;以下哪种安全MAC地址类型在设备重启后表项会丢失? 黑洞MAC地址 Sticky MAC地址 安全动态MAC地址 安全静态MAC地址 2.华为交换机MAC地址表中的动态sticky MAC地址的默认老化时间是多少秒? 300 不会老化 400 500 3.华为交换机MA…

Python 算法交易实验70 简单回顾

说明 感觉停滞了一段时间&#xff0c;本来qtv200应该在去年12月就迭代好了。回顾了一下原因&#xff1a; 1 工作的约束。因为量化现在是打辅助的角色(现在的工作还是比较香的)&#xff0c;去年上了项目&#xff0c;几乎与世隔绝的那种&#xff0c;打断了整体的节奏。2 信心的…

SDK开发

为什么需要Starter&#xff1f; 理想情况:开发者只需关心调用哪些接口&#xff0c;传递哪些参数就跟调用自己写的代码一样简单。 开发starter的好处&#xff1a;开发者引入之后&#xff0c;可以直接在application.yml中写配置&#xff0c;自动创建客户端。 starter开发流程 …