首页 > 其他分享 >Django中使用Celery和APScheduler实现定时任务

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

时间:2024-06-01 22:57:35浏览次数:24  
标签:celery tasks py sms Django Celery APScheduler import django

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

标签:celery,tasks,py,sms,Django,Celery,APScheduler,import,django
From: https://blog.csdn.net/m0_71660867/article/details/139380342

相关文章

  • 学习Django【2】把视图和路由连接起来的是URLconfigs的配置文件
    在view.py视图中定义:defdetail(request,question_id):returnHttpResponse("You'relookingatquestion%s."%question_id)defresults(request,question_id):response="You'relookingattheresultsofquestion%s."......
  • Django 笔记 - 特殊操作符 2
    前一篇博文介绍了Django中单独符号构成的常用特殊操作符,这篇博文接着介绍Django中组合符号构成的特殊操作符,即{{}} 和{%%}。这两个组合符号构成的特殊操作符都用于Djangotemplate,常用于HTML模板文件。下面分别介绍这两种特殊操作符:{{value}}  {{value}}可......
  • django项目部署到服务器
     1.安装python[root@dsc1nginx]#python-VPython3.6.5 2.安装数据库yuminstallmysqlmysql-develyuminstallsqlite-devel 3.安装django[root@dsc1mydjango]#pip3installdjangopipisconfiguredwithlocationsthatrequireTLS/SSL,howeverthesslmodu......
  • Django 里的增删改查
    下面是步骤先更新urls.py来添加新的urlfromdjango.contribimportadminfromdjango.urlsimportpathfromapp01importviewsurlpatterns=[path('demo/',views.demo),]在models.py里创建表fromdjango.dbimportmodels#Createyourmodelsher......
  • Django 做migrations时出错,解决方案
    在做migrations的时候,偶尔会出现出错。在已有数据的表中新增字段时,会弹出下面的信息运行这个命令时pythonmanage.pymakemigrationsTrackingfilebyfolderpattern:migrationsItisimpossibletoaddanon-nullablefield‘example’tobookwithoutspecify......
  • Django-第一个Django项目
    一、创建第一个Django项目使用命令行的方式创建:1、创建项目,打开终端,使用命令:django-adminstartproject[项目名称]即可创建。比如:django-adminstartprojectfirst_project。2、创建应用(app):一个项目类似于一个架子,但真正起作用的还是app。在终端进入到项目所在的路径,然后执......
  • django import_export 可视化导入导出外键字段
    在Django中使用django-import-export库进行外键关系的数据导入时,可以通过自定义资源类来处理外键字段的解析和保存。这样可以使导入过程更加直观和有效。我们将展示如何配置和使用django-import-export库,以便在导入数据时正确处理外键关系并将其从可读形式(如名称)转换为模型......
  • 计算机毕业设计python-django生态评价网站系统flask框架
    网站主要使用的模式是管理员上传各地生态图片和一些土地,降雨,植被的数据,用户登录到网站上根据网站上的数据进行生态的评价,综合了多方面的想法和不同的建议,查看网站的人来说能够看到不同的想法,不局限于一种想法,也可以在网站上发表自己的看法,并作出相应的对策。采用前后端分离开发......
  • python-django学院校园失物招领管理系统flask框架
    当前大多数校园失物招领信息主要是由志愿者联合会来组织开展,开展形式主要通过在公共场所填写失物招领信息以及志愿者服务公众号来传播失物招领消息,该公众号主要发布失物招领信息,学生教师需要通过到现场或者志愿者公众号去了解,这种形式主要局限于失主与拾主的联系以及失主的寻物......
  • python+django高校学生兼职信息网站设计pycharm项目flask
     自高等教育改革化,人们普遍重点观点放在了注重学生的学习能力和社会实践之上。为了满足了人们对教育的渴求,保障了人受教育的权利,各高校采取了扩招,广开大门对每位求知好学之人。随着学校人员增多,大量的求职需求也初显了出来。在信息化的时代,人们已经不像从前挨家挨户的求职,投简......