您的位置:首页 > 编程语言 > Python开发

Python APScheduler任务调度器

2017-03-31 09:46 543 查看
参考:
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: