#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import sys
from datetime import datetime
from oslo_config import cfg
from oslo_log import log
from oslo_service import service
'''
关键:
1 编写的定时任务需要继承oslo_service.service类,实现start方法,
start方法是主入口
def start(self):
delay_timers = 3
self.tg.add_timer(self.period, self.runTask, delay_timers)
上述self.tg.add_timer的参数分别是:
self.period: 定时任务的时间间隔
self.runTask: 定时运行的方法
delay_timers:首次运行的延迟启动时间,即延迟指定时间,开启第一次定时任务
参考:
https://docs.openstack.org/oslo.service/latest/user/history.html
'''
LOG = logging.getLogger(__name__)
OPTS = [
cfg.IntOpt('period',
default=10,
help='scan interval'),
]
CONF = cfg.CONF
CONF.register_opts(OPTS)
def timeHelper(func):
def wrapper(*args, **kwargs):
try:
start = datetime.now()
info = "############ Begin task, start: %s ##########" % (
str(start))
LOG.info(info)
func(*args, **kwargs)
end = datetime.now()
diff = end - start
info = "##### End task, end: %s, cost time: %s #####" % (
str(end), str(diff))
LOG.info(info)
except Exception as ex:
info = "Exception type is %s, message is %s" % (ex.__class__.__name__, ex)
LOG.error(info)
return wrapper
class MyTask(service.Service):
def __init__(self, *args, **kwargs):
super(MyTask, self).__init__(*args, **kwargs)
self.period = CONF.period
def process(self):
print "process task"
@timeHelper
def runTask(self):
self.process()
def start(self):
delay_timers = 3
self.tg.add_timer(self.period, self.runTask, delay_timers)
def prepare_service():
log.register_options(CONF)
log.set_defaults(default_log_levels=CONF.default_log_levels)
log.setup(CONF, 'myapp')
def main():
prepare_service()
cfg.CONF(sys.argv[1:], project='myapp')
service.launch(CONF, MyTask()).wait()
if __name__ == "__main__":
main()
python 64式: 第6式、定时器
猜你喜欢
转载自blog.csdn.net/qingyuanluofeng/article/details/83118961
今日推荐
周排行