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)

 

posted @   Mars.wang  阅读(238)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示