优先级队列基于队列中的时间和优先级



python中是否有任何数据结构使我能够实现基于基本优先级和队列中经过的时间的优先级队列?

这将帮助我避免这个队列中的某些元素挨饿。

据我所知,对象Queue仅基于输入其中的时间元素,而对象PriorityQueue仅基于优先级,因此它可能会导致缺少元素。

由于找不到我想要的东西,我创建了这个小类来满足我的需求。

class PriorityQueue(object):
"""
PriorityQueue supportant des objets de type dict.
Cette Queue base sa priorité sur deux éléments.
Le premier est une priorité de base.
Le second est une priorité qui se contruit au fur et à mesure du temps passé
dans la queue.
"""
import time
def __init__(self, seconde_pour_augmenter_priorite:int = 5):
"""
param :
seconde_pour_augmenter_priorite :
Variable qui permet de savoir le nombre de seconde nécessaire passé 
dans la queue pour augmenter le niveau de priorité
"""
self.queue = []
self.spap = seconde_pour_augmenter_priorite
def __str__(self):
"""
toString
"""
return ' '.join([str(i) for i in self.queue])
def sizeq(self):
return len(self.queue)
def isEmpty(self):
"""
Vérifier si la queue est vide
"""
return len(self.queue) == 0
def insert(self, data):
"""
Insérer un élément dans la queue
"""
data["temps-entre-queue"] = self.time.time()
self.queue.append(data)
def __calculer_priorite(self, data:dict, temps:float):
return data["priorite"] + (temps - data["temps-entre-queue"]) / self.spap
def pop(self):
"""
Pour retirer de la file d'attente l'élément avec la plus haute priorité
"""
try:
temps = self.time.time()
max_val = 0
for i in range(len(self.queue)):
if self.__calculer_priorite(self.queue[i], temps) > self.__calculer_priorite(self.queue[max_val], temps):
max_val = i
item = self.queue[max_val]
del self.queue[max_val]
return item
except IndexError:
print()
exit()

最新更新