Python之Scheduler框架浅析


Python的Scheduler框架是模仿Java的Quartz框架写的,用起来还是比较不错的,这里向大家强烈推荐下。下载地址:http://pypi.python.org/pypi/APScheduler/2.0.3

    1. 指定特定时间运行某一任务,可以通过如下方式:

  1. from apscheduler.scheduler import Scheduler  
  2.  
  3. sched = Scheduler()  
  4. sched.daemonic = False 
  5.  
  6. def job_function(text):  
  7.     print text  
  8.  
  9. from datetime import datetime  
  10. job = sched.add_date_job(job_function, datetime(20120412101359), ['Hello World'])  
  11.  
  12. sched.start() 

    2. 有些时候,我们需要每隔一定时间运行一下任务Interval-based scheduling的方式,如下:

  1. from apscheduler.scheduler import Scheduler  
  2.  
  3. sched = Scheduler()  
  4. sched.daemonic = False 
  5.  
  6. def job_function():  
  7.     print "Hello World" 
  8.  
  9. sched.add_interval_job(job_function, hours=2)  
  10. sched.add_interval_job(job_function, hours=2, start_date='2012-04-12 09:51:59')  
  11.  
  12. sched.start() 

    除此之外,也可以使用Decorator的方式,如下:

  1. from apscheduler.scheduler import Scheduler  
  2.  
  3. sched = Scheduler()  
  4. sched.daemonic = False 
  5. sched.start()  
  6.  
  7. @sched.interval_schedule(hours=2, start_date='2012-04-12 09:54:59')  
  8. def job_function():  
  9.     print "Hello World" 

    如果想解除Decorator功能方法,可以通过如下方式:

  1. scheduler.unschedule_job(job_function.job) 

     3. 如果我们想实现类似Linux下的crontab功能,可以通过Cron-style scheduling方式来实现,如下:

  1. from apscheduler.scheduler import Scheduler  
  2.  
  3. sched = Scheduler()  
  4. sched.daemonic = False 
  5.  
  6. def job_function():  
  7.     print "Hello World" 
  8.  
  9. # Schedules job_function to be run on the third Friday  
  10. # of June, July, August, November and December at 00:00, 01:00, 02:00 and 03:00  
  11. sched.add_cron_job(job_function, month='6-8,11-12', day='3rd fri', hour='0-3')  
  12.  
  13. sched.start() 

    同样,也可以通过Decorator方式来实现,如下:

  1. from apscheduler.scheduler import Scheduler  
  2.  
  3. sched = Scheduler()  
  4. sched.daemonic = False 
  5. sched.start()  
  6.  
  7. @sched.cron_schedule(day='last sun')  
  8. def some_decorated_task():  
  9.     print "I am printed at 00:00:00 on the last Sunday of every month!" 

    apscheduler会创建一个线程,这个线程默认是daemon=True,也就是默认的是线程守护的,这里设置为False只是为了方便看到效果。除此之外apscheduler也提供其他的选项,如threadpool和jobstores等功能,大家可以自己进行相关的探索学习,相关API可以参考:http://packages.python.org/APScheduler/genindex.html

相关内容