Python APScheduler任务调度器

本文介绍了一个使用Python APScheduler实现的任务调度系统。该系统通过不同类型的触发器(如间隔、定时和日期触发器)来调度任务,并展示了如何配置作业存储、执行器及默认设置等。此外,还介绍了如何获取、修改、暂停和恢复作业。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值