apscheduler定时任务实现

apscheduler参照官网设置配置文件

import os

from apscheduler.executors.pool import ProcessPoolExecutor, ThreadPoolExecutor
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from apscheduler.schedulers.background import BackgroundScheduler

from django.conf import settings
from pytz import utc

jobstores = {
    'default': SQLAlchemyJobStore(url='sqlite:///' + os.path.join(settings.BASE_DIR, 'apscheduler_jobs.sqlite3'), tablename='device_jobs')
   
}
executors = {
    'default': ThreadPoolExecutor(20),
    'processpool': ProcessPoolExecutor(5)
}

job_defaults = {
    'coalesce': True,
    'misfire_grace_time': 300,
    'replace_existing': True,
    'max_instances': 3
}

scheduler = BackgroundScheduler(jobstores=jobstores,executors=executors, job_defaults=job_defaults, timezone=utc)
scheduler.start()

job_add函数调用

scheduler.add_job(
                taskrun.task_run,   #执行的函数
                trigger=trg,            #调用的时间方式
                args=case_run_params,  #执行函数的参数
                id="{}".format(jid),        #唯一标识,为了获取和删除
                replace_existing=True
            )

trigger选择cron模式

调用CronTrigger将组成的时间格式转换,可以变成一次性定时,周期性定时,循环

class apscheduler.triggers.cron.CronTrigger(year=None, month=None, day=None, week=None, day_of_week=None, hour=None, minute=None, second=None, start_date=None, end_date=None, timezone=None, jitter=None)

 trg_dict = {
                "year": year,
                "month": month,
                "day": day,
                "week": week,
                "hour": hour,
                "minute": minute,
                "second": second
            }

(trigger: cron[year='*', month='*', day='*', week='*', hour='19', minute='25', second='0'], next run at: 2018-11-08 19:25:00 CST)#每天19点25分执行

表达式    说明
*        可支持的每一个值
*/a      可支持的值里面的能被 a 整除的每一个值
a-b      a 到 b,包括a, b, a-b 之间的每一个值 (a 必须小于 b)
a-b/c    能被 c 整除的 a-b 之间的每一个值
x,y,z    指定的x, y, z 值 

可以scheduler.remove_job('id')#id是添加时的标识内容

posted @ 2018-11-07 20:30  oneforall97  阅读(155)  评论(0编辑  收藏  举报