我在使用以下参数创建插入函数时遇到问题。 insert函数应该包含一个优先级队列和一个元素,并使用优先级规则插入它 -
优先级队列将执行一系列任务并对其进行排序 基于它们的重要性。每个任务的整数优先级从10(最高优先级)到1 (最低优先级)。如果两个任务具有相同的优先级,则订单应基于订单 它们被插入到优先级队列中(早先的第一个)。
所以,截至目前我已经创建了以下代码来初始化所需的一些东西......
class Tasks():
__slots__ = ('name', 'priority')
def __init__(bval):
bval.name = myName
bval.priority = myPriority
return bval
class PriorityQueue():
__slots__ = ('queue', 'element')
def __init__(aval):
aval.queue = queue
aval.element = element
return aval
我正在尝试编写的代码是insert(element,queue):应该使用优先级队列插入元素。同样,myPriorty是1到10之间的整数。
同样可以执行以下操作以确保我创建1到10的优先级...
def __init__(bval , myPriority = 10):
bval.priority = myPriority
bval.pq = [[] for priority in range(bval.myPriority)]
这样我就可以用bval.pq
替换插入任务中的myPriority答案 0 :(得分:4)
你为什么要重新发明轮子?
来自队列导入PriorityQueue
http://docs.python.org/2/library/queue.html?highlight=priorityqueue#Queue.PriorityQueue
首先检索最低值的条目(最低值条目是按排序(列表(条目))[0]返回的条目。条目的典型模式是以下形式的元组:
(priority_number,data)。
我使用这样的模块在UI和后台轮询线程之间进行通信。
READ_LOOP = 5
LOW_PRI = 3
MED_PRI = 2
HI_PRI = 1
X_HI_PRI = 0
然后是这样的:
CoreGUI.TX_queue.put((X_HI_PRI,'STOP',[]))
答案 1 :(得分:2)
答案 2 :(得分:0)
来自亚历山德罗·莫利纳(Alessandro Molina)的一本好书“ Modern Python Standard Library Cookbook”
堆是所有优先事项的完美匹配,例如 优先级队列:
import time
import heapq
class PriorityQueue:
def __init__(self):
self._q = []
def add(self, value, priority=0):
heapq.heappush(self._q, (priority, time.time(), value))
def pop(self):
return heapq.heappop(self._q)[-1]
示例:
>>> def f1(): print('hello')
>>> def f2(): print('world')
>>>
>>> pq = PriorityQueue()
>>> pq.add(f2, priority=1)
>>> pq.add(f1, priority=0)
>>> pq.pop()()
hello
>>> pq.pop()()
world
答案 3 :(得分:-2)
deque(from collections import deque
)是单个队列的python实现。您可以在一端添加项目,并从另一端删除它们。如果每个优先级都有一个双端队列,则可以添加到所需的优先级。
它们看起来有点像这样:
from collections import deque
class PriorityQueue:
def __init__(self, priorities=10):
self.subqueues = [deque() for _ in range(levels)]
def enqueue(self, priorty, value):
self.subqueues[priority].append(value)
def dequeue(self):
for queue in self.subqueues:
try:
return queue.popleft()
except IndexError:
continue