python使用apscheduler作定時任務的管理

    工做中常常須要作一些定時任務,以前基本都是用crontab來定時執行腳本,python也有一個apscheduler方便進行定時任務的管理,因此我簡單學習了下apscheduler的使用。html

BlockingScheduler
# coding=utf-8
from time import sleep
from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor

__author__ = 'chenglp'



#執行器
executors = {
    'default': ThreadPoolExecutor(10),
    'processpool': ProcessPoolExecutor(3),
}

import datetime
from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.schedulers.background import BackgroundScheduler

import logging
logging.basicConfig()



def call_job1():
   sleep(3)
   print 'job1 run at %s' % datetime.datetime.now().isoformat()

def call_job2():
   print 'job2 run at %s' % datetime.datetime.now().isoformat()


if __name__ == '__main__':
    
    bs = BlockingScheduler(executors=executors)
    bs.add_job(call_job1,  'interval', seconds=2, executor='processpool', max_instances=2, id='call_job1')
    bs.add_job(call_job2, 'interval', seconds=2, executor='processpool')
    try:
        bs.start()
        sleep(10)
    except (KeyboardInterrupt, SystemExit):
        bs.shutdown()
        pass

在生成Scheduler時,能夠傳入不少參數,如jobstores(任務的存儲方式), executors(執行方式,能夠配置時線程仍是進程),job_defaults(一些其餘默認配置)python

而後使用add_job增長任務,第二個參數可選爲date(一次性指定日期);interval(在某個時間範圍內間隔多長時間執行一次);cron(和unix crontab格式兼容,最爲強大),這個參數決定了以後的時間如何配置。這裏還指定了下executor爲哪一個,以前定義了default和processpool兩個,tornado

最後使用start()方法即開始定時任務,更多的操做能夠查看apscheduler的官網,oop

TornadoScheduler

用官方的例子:
學習

from datetime import datetime
import os

from tornado.ioloop import IOLoop
from apscheduler.schedulers.tornado import TornadoScheduler


def tick():
    print('Tick! The time is: %s' % datetime.now())


if __name__ == '__main__':
    scheduler = TornadoScheduler()
    scheduler.add_job(tick, 'interval', seconds=3)
    scheduler.start()
    print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C'))

    # Execution will block here until Ctrl+C (Ctrl+Break on Windows) is pressed.
    try:
        IOLoop.instance().start()
    except (KeyboardInterrupt, SystemExit):
        scheduler.shutdown()
        pass

能夠看到很好的跟tornado融合。spa

參考連接:線程

http://www.bubuko.com/infodetail-716148.html
unix

http://apscheduler.readthedocs.org/en/latest/
code

相關文章
相關標籤/搜索