Python下定时任务框架APScheduler的使用(2)

from apscheduler.schedulers.background import BackgroundScheduler
      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)

5.对任务作业的基本操作:

1).添加作业有两种方式:第一种可以直接调用add_job(),第二种使用scheduled_job()修饰器。

而add_job()是使用最多的,它可以返回一个apscheduler.job.Job实例,因而可以对它进行修改或者删除,而使用修饰器添加的任务添加之后就不能进行修改。

#!/usr/bin/env python
      #-*- coding:UTF-8
      import time
      import datetime
      from apscheduler.schedulers.blocking import BlockingScheduler
      def job1(f):
          print time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())), f
      def job2(arg1, args2, f):
          print f, args1, args2
      def job3(**args):
          print args

APScheduler支持以下三种定时任务:

cron: crontab类型任务

interval: 固定时间间隔任务

date: 基于日期时间的一次性任务

scheduler = BlockingScheduler()

#循环任务示例

scheduler.add_job(job1, 'interval', seconds=5, args=(1,),)

#定时任务示例

scheduler.add_job(job1, 'cron', second='*/5', args=(1,2,3,),)

#一次性任务示例

scheduler.add_job(job1, next_run_time=(datetime.datetime.now() + datetime.timedelta(seconds=10)), args=(1,),)

传递参数的方式有元组(tuple)、列表(list)、字典(dict)

注意:不过需要注意采用元组传递参数时后边需要多加一个逗号   

#基于list

scheduler.add_job(job2, 'interval', seconds=5, args=['a','b','list'],)

#基于tuple

scheduler.add_job(job2, 'interval', seconds=5, args=('a','b','tuple',),)

#基于dict

scheduler.add_job(job3, 'interval', seconds=5, kwargs={'f':'dict', 'a':1,'b':2},cron', second='*/5' ,id='my_job_id',)

def test_task():

  print("Hello world!")

2).获得任务列表:

可以通过get_jobs方法来获取当前的任务列表,也可以通过get_job()来根据job_id来获得某个任务的信息。并且apscheduler还提供了一个print_jobs()方法来打印格式化的任务列表。

例如:

scheduler.add_job(my_job, 'interval', seconds=5,)

print scheduler.get_job('my_job_id')

print scheduler.get_jobs()

3).修改任务:

修改任务的属性可以使用apscheduler.job.Job.modify()或者modify_job()方法,可以修改除了id的其它任何属性。

例如:

job = scheduler.add_job(my_job, 'interval', seconds=5,)

job.modify(max_instances=5,)

4).删除任务:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9479dee39fab04fa4a9e97319ff4af5e.html