工做中常常须要作一些定时任务,以前基本都是用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
参考连接:线程