zoukankan      html  css  js  c++  java
  • django集成Apscheduler3

    为了对任务进行更细粒度的操作,我们在django集成了apschedule

    新建app:jobSchedule

    #urls.py
    from django.urls import path
    
    from . import views
    
    app_name = 'jobSchedule'
    
    urlpatterns = [
        path('', views.index, name='index'),
        path('add_task/<str:task>/', views.add_task),
        path('pause_task/<str:task>/', views.pause_task),
        path('resume_task/<str:task>/', views.resume_task),
        path('remove_task/<str:task>/', views.remove_task),
        path('desc_task/', views.desc_task),
    ]

    views.py

    from django.http import HttpResponse, JsonResponse
    from django.shortcuts import render
    
    # Create your views here.
    
    import datetime
    from apscheduler.schedulers.background import BackgroundScheduler
    
    
    def job_func(text):
        print("当前时间:" + text, datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3])
    
    
    scheduler = BackgroundScheduler()
    scheduler.add_job(job_func, 'cron', second='0,20,40', args=("sss",))
    scheduler.start()
    
    
    def index(request):
        return None
    
    
    # 添加任务
    def add_task(request, task=None):
        scheduler.add_job(job_func, 'cron', second='10,30,50', id=task, args=(task,))
        return HttpResponse("success")
    
    
    # 暂停任务
    def pause_task(request, task=None):
        scheduler.pause_job(task)
        return HttpResponse("pause success")
    
    
    # 重启任务
    def resume_task(request, task=None):
        scheduler.resume_job(task)
        return HttpResponse("resume success")
    
    
    # 删除任务
    def remove_task(request, task=None):
        scheduler.remove_job(task)
        return HttpResponse("remove success")
    
    
    # 描述任务
    def desc_task(request):
        jobs = scheduler.get_jobs()
        new_jobs = []
        for item in jobs:
            job = {}
            job['name'] = item.name
            job['id'] = item.id
            job['args'] = item.args
            new_jobs.append(job)
        return JsonResponse(new_jobs, safe=False)

    新获取的经验点是schedule启动一次即可,即使后来添加删除了job,不需要重新start

    二、使用MySQL做存储库

    上面的任务都是在内存存储的,程序停止之后都没有了。生产肯定不能这样的

    除内存外,apscheduler支持mongodb,redis,mysql等各种存储,我们以最常见的MySQL写个例子。

    jobstores = {
        'default': SQLAlchemyJobStore(url='mysql+pymysql://root:password@ip:3306/dbname?charset=utf8')
    }

    不指定表名,程序会自动在数据库创建一张名为apscheduler_jobs的表来序列化我们的任务。

    在创建scheduler时指定jobstore

    scheduler = BackgroundScheduler(jobstores=jobstores)

    之后我们再添加任务,就需要指定id,并且增加一个参数

    id用于唯一标识一个任务,replace_existing=True用于再添加重名任务时覆盖原有记录而不是直接报错

    scheduler.add_job(job_func, 'cron', second='0,20,40', args=("sss",),id='sss',replace_existing=True)
  • 相关阅读:
    hdu 5100 n*n棋盘放k*1长方条最多覆盖面积
    poj 3635/hdu 1676 Full Tank? 车辆加油+最短路
    poj 3613 经过k条边最短路 floyd+矩阵快速幂
    2014上海全国邀请赛 解题报告
    漫谈程序员系列:看看你离优秀有多远
    C2第七次作业解题报告
    C++ STL
    hdu 5098 双队列拓扑排序
    深度学习数据集 近百个开源数据集
    helper工具包——基于cifar10数据集的cnn分类模型的模块
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/15665891.html
Copyright © 2011-2022 走看看