#!/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:首次執行的延遲啟動時間,即延遲指定時間,開啟第一次定時任務
參考:'''log = logging.getlogger(__name__)
opts = [
cfg.intopt('period',
default=10,
help='scan interval'),
]conf = cfg.conf
conf.register_opts(opts)
def timehelper(func):
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)
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)
def main():
prepare_service()
service.launch(conf, mytask()).wait()
if __name__ == "__main__":
main()
python 64式 第13式 執行緒
usr bin env python coding utf 8 import time import threading 關鍵 1 併發和並行 併發 交替處理多個任務的能力 關鍵在併發交替 並行 同時處理多個任務的能力 關鍵在並行同時 2 多程序與多執行緒 多程序可以充分使用多個cpu 多執行緒不能...
python 64式 第10式 深淺拷貝
usr bin env python coding utf 8 import copy 關鍵 1 深拷貝 拷貝了物件所有元素,包含巢狀元素。是與原來物件無關的全新物件。無關性。2 淺拷貝 建立新物件,但新物件中各個元素是原物件對應各個元素的引用。3 舉例如下 a 1,2,3 c copy.copy ...
python 64式 第49式 dict原始碼分析
目標 弄清楚python中dict的實現原理 1.1 原理 python的字典實際是雜湊表,通過雜湊函式將key對映到表中的位置來 儲存value。存在不同物件經過雜湊函式得到的雜湊值可能相同,此時 採用開放定址法來解決衝突。開放定址法通過二次探測函式f尋找下乙個候選位置,若位置可用,則將資料插入。...