class MonitorServer(object): #创建主的类,调用连接Redis&调用serialize序列化,把监控模板上传至Redis def __init__(self): self.r = RedisHelper() self.save_configs() self.sub = self.r.subscribe() def start(self): self.monitor_data_processing() while True: client_data = json.loads(self.sub.parse_response()[2]) client_data['last_update'] = time.time() #print client_data business_type = client_data.keys()[0] action_process.action_process(self,business_type,client_data) ''' self.r.set('ServiceData::%s:%s' % (client_data['report_monitor_data']['ip_address'], client_data['report_monitor_data']['service_name']), client_data) ''' #数据存入到Redis中并且存储的相同数据只保留一条,数据不断刷新 def monitor_data_processing(self): #启用多进程处理任务 p = multiprocessing.Process(target=self.monitor_data_handling,) p.daemon = True #设置为dameon模式,主进程挂掉之后,关闭进程 p.start() def monitor_data_handling(self):#所有的数据逻辑处理方法 print '''---starting a new process to deal with monitor data ---''' while True: client_data = self.r.keys("ServiceData::*") for i in client_data: host_ip,host_server = i.split('::')[1].split(':') action_process.action_work(self,i,host_server) self.r.del_key(i) print i,'is work done' def save_configs(self): serialize.push_config_toredis(self,hosts.monitored_groups)#这里把self传过去,在push_config_toredis中即可调用实例