用最小堆数据结构优化服务更新效率

94 阅读1分钟

背景需求:

  • 由于日常业务更新可以有并发执行,但每个任务执行的时间不一,为了缩短整体的服务更新时间,用最小堆数据结构以更新时间耗时为维度做了更新任务的排序。
import sys
import json

def getJsonData(file):
    with open(file,'r') as f:
        data = json.load(f)
        if data:
            return data
        else:
            return False


class PriorityQueue:
    def __init__(self,updateService,priorityMapping,jenkinsJobMapping):
        self.__updateService = updateService
        self.__priority = priorityMapping
        self.__jenkinsService = jenkinsJobMapping
        self.__updateServicePriority = {}
        self.__jenkinsJobList = []

    def listPriority(self):
        print (self.__priority)
        for key,value in self.__priority.items():
            print (key)
            print (value)


    def listJenkinsJobs(self):
        print ("service list:")
        for key,value in self.__jenkinsService.items():
            print (key)
            print (value)

    def sortService(self):
        service = sorted(self.__updateServicePriority.items(), key=lambda x: x[1], reverse=True)
        if service:
            return service
        else:
            return False

    def getPriorityServiceList(self):
        services = self.sortService()
        if services:
            servicelist = []
            for i in services:
                servicelist.append(i[0])

            return servicelist
        else:
            return False

    def checkUpdateServices(self):

        for service in self.__updateService:
            if service not in self.__priority.keys():
                print("Error:could not found :%s in priority") %(service)
                sys.exit(1)
            else:
                self.__updateServicePriority[service] = self.__priority[service]

        for service in self.__updateService:
            if service not in self.__jenkinsService:
                print ("Error:could not found %s in jenkins Jobs") %(service)
                sys.exit(1)


        print self.__updateServicePriority

    def getJobNameList(self):
        data = self.getPriorityServiceList()
        if data:
            self.__jenkinsJobList = data
            return self.__jenkinsJobList
        else:
            return False