工做中常常須要作一些定時任務,以前基本都是用crontab來定時執行腳本,python也有一個apscheduler方便進行定時任務的管理,因此我簡單學習了下apscheduler的使用。html
# 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
用官方的例子:
學習
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
參考連接:線程