Django-Apscheduler 定时任务

Posted 小小菜_v

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django-Apscheduler 定时任务相关的知识,希望对你有一定的参考价值。

Apscheduler 定时任务

django 框架中使用定时任务,创建一个py文件crontab.py,代码如下:

import logging
from datetime import datetime

from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore, register_events, register_job
from user.views import crontab_send_mail


LOG = logging.getLogger(__name__)
try:
    # 实例化调度器
    scheduler = BackgroundScheduler()
    # 调度器使用DjangoJobStore()
    scheduler.add_jobstore(DjangoJobStore(), "default")
    register_events(scheduler)
    scheduler.start()
except Exception as e:
    print(e)
    # 有错误就停止定时器
    scheduler.shutdown()


def send_mail(value):
    """test定时工作"""
    LOG.error('{} {} send mail'.format(datetime.now(), value))


def send_mail_test(value):
    """test定时工作"""
    print('{} {} send mail test'.format(datetime.now(), value))


# 每12s调一次任务
scheduler.add_job(send_mail_test, 'interval', seconds=12,
                  max_instances=1, coalesce=True, id="send_mail_test")

# 周一到周五早上9:30定时发送邮件
scheduler.add_job(crontab_send_mail, 'cron', day_of_week='mon-fri',
                  hour='9', minute='30', max_instances=1, coalesce=True, id="crontab_send_mail")

在urls.py文件中导入模块

from django.conf.urls import url
from . import views
# 导入定时任务,每次服务重启时,url文件只会执行一遍
from .crontab import scheduler

urlpatterns = [

    url(r'^login$', views.login, name="login"),
]

后台启动django,将会在数据库中生成2张表记录任务名和任务的异常信息:django_apscheduler_djangojob,django_apscheduler_djangojobexecution

以上是关于Django-Apscheduler 定时任务的主要内容,如果未能解决你的问题,请参考以下文章

java代码启动一个定时任务

Celery实现定时任务crontab

以代码的方式管理quartz定时任务的暂停重启删除添加等

Laravel实现定时任务的示例代码

asp.net 定时器 定时执行任务

MySQL定时执行脚本(计划任务)实例