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是添加时的标识内容