参考:
https://segmentfault.com/a/1190000007739974
http://apscheduler.readthedocs.io/en/3.0/userguide.html#modifying-jobs
# -*- coding:utf-8 -*-
'''数据分析、统计'''
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djproject.settings")
import sys
sys.path.append('/home/shangtao/www/djproject')
import django
if django.VERSION >= (1, 7): # 自动判断版本
django.setup()
from sensor.models import Device, Type, Hour_Value, Day_Value, Month_Value, Value
from bluewind.models import HourValue as BW_HourValue
from bluewind.models import DayValue as BW_DayValue
from django.db.models import Q
from django.db.models import Avg, Sum, FloatField, IntegerField
import datetime
import time
import logging
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor
from apscheduler.jobstores.memory import MemoryJobStore
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from django.db import connection
# sentry
from raven import Client
sentry = Client('http://c435951d0ae045cb9db531b39ce214ff:d9f53e043ed84274aa6c72b0deba69d6@*.*.*.*:9999/2')
def interval_job():
print("%s: interval job." % datetime.datetime.now())
def cron_job():
print("%s: crontab job." % datetime.datetime.now())
def date_job():
print("%s: date job." % datetime.datetime.now())
jobstores = {
'default': SQLAlchemyJobStore(url='sqlite:///scheduler.sqlite')
}
executors = {
'default': ThreadPoolExecutor(5),
'processpool': ProcessPoolExecutor(1)
}
job_defaults = {
'coalesce': False,
'max_instances': 3
}
scheduler = BackgroundScheduler(daemon=True, jobstores=jobstores, executors=executors, job_defaults=job_defaults)
d1 = datetime.datetime.now()
d2 = d1 + datetime.timedelta(seconds=20)
ij = scheduler.add_job(interval_job, trigger='interval', seconds=5, )
cj = scheduler.add_job(cron_job, trigger='cron', minute=0, second=30, )
dj = scheduler.add_job(date_job, trigger='date', run_date=d2, )
# scheduler.add_job(clean_hour_Values, 'cron', minute=0, second=30)
# scheduler.add_job(clean_day_Values, 'cron', hour=23, minute=55)
'''
Jobstore default:
clean_hour_Values (trigger: cron[minute='0', second='30'], next run at: 2017-03-29 17:00:30 CST)
clean_day_Values (trigger: cron[hour='23', minute='55'], next run at: 2017-03-29 23:55:00 CST)
'''
print (scheduler.get_jobs())
scheduler.print_jobs()
# # delete job
# scheduler.remove_job(cj.id)
# scheduler.remove_all_jobs()
# # pause and resume job
# scheduler.pause_job(cj.id)
# scheduler.resume_job(cj.id)
# # get job
# scheduler.get_job(cj.id)
# scheduler.get_jobs()
# # modify job
# scheduler.modify_job(cj.id, name='modify_job_name')
# If you want to reschedule the job – that is, change its trigger, you can use either apscheduler.job.Job.reschedule() or reschedule_job().
scheduler.reschedule_job(cj.id, trigger='interval', seconds=2)
scheduler.print_jobs()
try:
scheduler.start()
# This is here to simulate application activity (which keeps the main thread alive).
while True:
time.sleep(60)
except (KeyboardInterrupt, SystemExit):
scheduler.shutdown() # Not strictly necessary if daemonic mode is enabled but should be done if possible