“APScheduler启动调度器”的版本间的差异
来自CloudWiki
(→添加工作任务) |
(→方法二:使用数据库作为作业存储器) |
||
第95行: | 第95行: | ||
==方法二:使用数据库作为作业存储器== | ==方法二:使用数据库作为作业存储器== | ||
+ | |||
+ | <nowiki> | ||
+ | # -*- 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() | ||
+ | |||
+ | </nowiki> |
2021年5月4日 (二) 07:35的版本
目录
启动调度器
启动调度器前需要先添加作业,有两种方法可以向调度器添加作业:一是通过接口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()) 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()