APScheduler启动调度器
来自CloudWiki
目录
启动调度器
启动调度器前需要先添加作业,有两种方法可以向调度器添加作业:一是通过接口add_job();二是通过使用函数装饰器,其中add_job()返回一个apscheduler.job.Job类的实例,用于后续修改或删除作业。
启动调度器只需要调用调度器的start()方法,下面分别使用不同的作业存储器来举例说明。
方法一:使用默认的作业存储器
引入模块
# -*- coding: utf-8 -*- # !/usr/local/bin/python # Time: 2018/10/13 20:27:58 # Description: # File Name: start_schduler.py from apscheduler.schedulers.blocking import BlockingScheduler import datetime from apscheduler.jobstores.memory import MemoryJobStore from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor
调度器配置
jobstores = { 'default': MemoryJobStore() } executors = { 'default': ThreadPoolExecutor(20), 'processpool': ProcessPoolExecutor(10) } job_defaults = { 'coalesce': False, 'max_instances': 3 }
定义工作任务
def my_job(id='my_job'): print (id,'-->',datetime.datetime.now())
添加工作任务
scheduler = BlockingScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults) scheduler.add_job(my_job, args=['job_interval',],id='job_interval',trigger='interval', seconds=5,replace_existing=True) scheduler.add_job(my_job, args=['job_cron',],id='job_cron',trigger='cron',month='4-8,11-12',hour='7-11', second='*/10',\ end_date='2018-05-30') scheduler.add_job(my_job, args=['job_once_now',],id='job_once_now') scheduler.add_job(my_job, args=['job_date_once',],id='job_date_once',trigger='date',run_date='2020-06-20 08:48:05')
启动调度器
try: scheduler.start() except SystemExit: print('exit') exit()
完整代码
# -*- coding: utf-8 -*- # !/usr/local/bin/python # Time: 2018/10/13 20:27:58 # Description: # File Name: start_schduler.py from apscheduler.schedulers.blocking import BlockingScheduler import datetime from apscheduler.jobstores.memory import MemoryJobStore from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor def my_job(id='my_job'): print (id,'-->',datetime.datetime.now()) import pandas as pd def my_job2(id='my_job'): df = pd.read_html("http://www.air-level.com/air/jinan/", encoding='utf-8', header=0)[0] df.to_excel('xian_tianqi.xlsx', index=False) jobstores = { 'default': MemoryJobStore() } executors = { 'default': ThreadPoolExecutor(20), 'processpool': ProcessPoolExecutor(10) } job_defaults = { 'coalesce': False, 'max_instances': 3 } scheduler = BlockingScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults) scheduler.add_job(my_job, args=['job_interval',],id='job_interval',trigger='interval', seconds=5,replace_existing=True) scheduler.add_job(my_job, args=['job_cron',],id='job_cron',trigger='cron',month='4-8,11-12',hour='7-11', second='*/10',\ end_date='2018-05-30') scheduler.add_job(my_job, args=['job_once_now',],id='job_once_now') scheduler.add_job(my_job, args=['job_date_once',],id='job_date_once',trigger='date',run_date='2018-04-05 07:48:05') try: scheduler.start() except SystemExit: print('exit') exit()
方法二:使用数据库作为作业存储器
# -*- coding: utf-8 -*- # !/usr/local/bin/python # Time: 2018/10/13 20:29:03 # Description: # File Name: start_scheduler_db.py from apscheduler.schedulers.blocking import BlockingScheduler import datetime from apscheduler.jobstores.memory import MemoryJobStore from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore def my_job(id='my_job'): print (id,'-->',datetime.datetime.now()) jobstores = { 'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite') } executors = { 'default': ThreadPoolExecutor(20), 'processpool': ProcessPoolExecutor(10) } job_defaults = { 'coalesce': False, 'max_instances': 3 } scheduler = BlockingScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults) scheduler.add_job(my_job, args=['job_interval',],id='job_interval',trigger='interval', seconds=5,replace_existing=True) scheduler.add_job(my_job, args=['job_cron',],id='job_cron',trigger='cron',month='4-8,11-12',hour='7-11', second='*/10',\ end_date='2018-05-30') scheduler.add_job(my_job, args=['job_once_now',],id='job_once_now') scheduler.add_job(my_job, args=['job_date_once',],id='job_date_once',trigger='date',run_date='2018-04-05 07:48:05') try: scheduler.start() except SystemExit: print('exit') exit()