设置新任务的默认最大实例数为3
方法一: from pytz import utc from apscheduler.schedulers.background import BackgroundScheduler from apscheduler.jobstores.mongodb import MongoDBJobStore from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor jobstores = { 'mongo': MongoDBJobStore(), 'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite') } executors = { 'default': ThreadPoolExecutor(20), 'processpool': ProcessPoolExecutor(5) } job_defaults = { 'coalesce': False, 'max_instances': 3 } scheduler = BackgroundScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults, timezone=utc) 方法二: from apscheduler.schedulers.background import BackgroundScheduler # The "apscheduler." prefix is hard coded scheduler = BackgroundScheduler({ 'apscheduler.jobstores.mongo': { 'type': 'mongodb' }, 'apscheduler.jobstores.default': { 'type': 'sqlalchemy', 'url': 'sqlite:///jobs.sqlite' }, 'apscheduler.executors.default': { 'class': 'apscheduler.executors.pool:ThreadPoolExecutor', 'max_workers': '20' }, 'apscheduler.executors.processpool': { 'type': 'processpool', 'max_workers': '5' }, 'apscheduler.job_defaults.coalesce': 'false', 'apscheduler.job_defaults.max_instances': '3', 'apscheduler.timezone': 'UTC', }) 方法三: from pytz import utc from apscheduler.schedulers.background import BackgroundScheduler from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore from apscheduler.executors.pool import ProcessPoolExecutor jobstores = { 'mongo': {'type': 'mongodb'}, 'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite') } executors = { 'default': {'type': 'threadpool', 'max_workers': 20}, 'processpool': ProcessPoolExecutor(max_workers=5) } job_defaults = { 'coalesce': False, 'max_instances': 3 } scheduler = BackgroundScheduler() # ..这里可以添加任务 scheduler.configure(jobstores=jobstores, executors=executors, job_defaults=job_defaults, timezone=utc) 五、启动调度器除了BlockingScheduler外,其他非阻塞的调度器都会立即返回,运行之后的代码。
BlockingScheduler需要将运行的代码放在start()之前
1.添加任务 1.调用add_job() #可以传参max_instance,同一任务的运行实例个数 当有任务中途中断,后面恢复后,有N个任务没有执行 coalesce:true ,恢复的任务会执行一次 coalesce:false,恢复后的任务会执行N次配合misfire_grace_time使用 misfire_grace_time设置时间差值,由于某些原因没有运行,再次提交时,大于设置的时间,实例不会运行。 2.装饰器scheduled_job() 立即运行可以不设置trigger参数 2.移除任务 # 根据任务实例删除 job = scheduler.add_job(myfunc, 'interval', minutes=2) job.remove() # 根据任务id删除 scheduler.add_job(myfunc, 'interval', minutes=2,) scheduler.remove_job('my_job_id') 3.暂停任务 job = scheduler.add_job(myfunc, 'interval', minutes=2) # 根据任务实例 job.pause() #暂停 job.resume() #继续 # 根据任务id暂停 scheduler.add_job(myfunc, 'interval', minutes=2,) scheduler.pause_job('my_job_id') scheduler.resume_job('my_job_id') 4.调度器操作 scheduler.start() #开启 scheduler.shotdown(wait=True|False) #关闭 False 无论任务是否执行,强制关闭 异常捕获 # 可以添加apscheduler日志至DEBUG级别,这样就能捕获异常信息 import logging logging.basicConfig() logging.getLogger('apscheduler').setLevel(logging.DEBUG)更多Python相关信息见Python 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=17
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx