歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Python之Scheduler框架淺析

Python之Scheduler框架淺析

日期:2017/3/1 10:24:42   编辑:Linux編程
Python的Scheduler框架是模仿Java的Quartz框架寫的,用起來還是比較不錯的,這裡向大家強烈推薦下。下載地址:http://pypi.python.org/pypi/APScheduler/2.0.3

1. 指定特定時間運行某一任務,可以通過如下方式:

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

2. 有些時候,我們需要每隔一定時間運行一下任務Interval-based scheduling的方式,如下:

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

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

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

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

  1. scheduler.unschedule_job(job_function.job)

3. 如果我們想實現類似Linux下的crontab功能,可以通過Cron-style scheduling方式來實現,如下:

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

同樣,也可以通過Decorator方式來實現,如下:

  1. from apscheduler.scheduler import Scheduler
  2. sched = Scheduler()
  3. sched.daemonic = False
  4. sched.start()
  5. @sched.cron_schedule(day='last sun')
  6. def some_decorated_task():
  7. 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

Copyright © Linux教程網 All Rights Reserved